在哪里可以找到有关在 JavaScript 中格式化日期的文档?[关闭]
-
20-08-2019 - |
题
我注意到 JavaScript 的 new Date()
函数非常智能地接受多种格式的日期。
Xmas95 = new Date("25 Dec, 1995 23:15:00")
Xmas95 = new Date("2009 06 12,12:52:39")
Xmas95 = new Date("20 09 2006,12:52:39")
我在调用时找不到显示所有有效字符串格式的文档 new Date()
功能。
这是为了将字符串转换为日期。如果我们看相反的一面,即将日期对象转换为字符串,到目前为止我的印象是 JavaScript 没有内置 API 将日期对象格式化为字符串。
编者注: 以下方法是提问者尝试在特定浏览器上运行但确实 不是 工作一般; 查看此页面上的答案 查看一些实际的解决方案。
今天,我和 toString()
日期对象上的方法,令人惊讶的是它用于将日期格式化为字符串。
var d1 = new Date();
d1.toString('yyyy-MM-dd'); //Returns "2009-06-29" in Internet Explorer, but not Firefox or Chrome
d1.toString('dddd, MMMM ,yyyy') //Returns "Monday, June 29,2009" in Internet Explorer, but not Firefox or Chrome
另外,在这里我找不到任何有关将日期对象格式化为字符串的所有方法的文档。
列出了支持的格式说明符的文档在哪里 Date()
目的?
解决方案
我爱的 10种使用JavaScript 和 与工作格式的时间和日期日期
基本上,你有三种方法,你必须琴弦结合自己:
getDate() // Returns the date
getMonth() // Returns the month
getFullYear() // Returns the year
示例:
var d = new Date();
var curr_date = d.getDate();
var curr_month = d.getMonth() + 1; //Months are zero based
var curr_year = d.getFullYear();
console.log(curr_date + "-" + curr_month + "-" + curr_year);
其他提示
<强> Moment.js 强>
这是一个(轻量级)*的JavaScript库日期解析,操纵和格式化日期。
var a = moment([2010, 1, 14, 15, 25, 50, 125]);
a.format("dddd, MMMM Do YYYY, h:mm:ss a"); // "Sunday, February 14th 2010, 3:25:50 pm"
a.format("ddd, hA"); // "Sun, 3PM"
(*)轻质含义9.3KB缩小的+ gzip压缩在最小可能的设置(2014年2月)
如果您已经在项目中使用 jQuery UI的,您可以使用内置的用于格式化你的日期对象日期选择方法:
$.datepicker.formatDate('yy-mm-dd', new Date(2007, 1 - 1, 26));
然而,该日期选择器仅格式的日期,而且无法格式化次。
看一看 jQuery UI的日期选择器formatDate 时,这些实施例。
列出了支持的格式说明符的文档在哪里
Date()
目的?
我今天偶然发现了这个问题,很惊讶没有人花时间回答这个简单的问题。确实,有许多库可以帮助进行日期操作。有些比其他更好。但这不是问的问题。
AFAIK,纯 JavaScript 不支持格式说明符 您表示希望使用它们的方式. 。但它确实支持格式化日期和/或时间的方法,例如 .toLocaleDateString()
, .toLocaleTimeString()
, , 和 .toUTCString()
.
这 Date
我最常使用的对象引用位于 w3schools.com 网站 (但 快速谷歌搜索 将揭示更多可能更好地满足您的需求)。
另请注意, 日期对象属性 部分提供了一个链接 prototype
, ,它说明了使用自定义方法扩展 Date 对象的一些方法。已经有 一些辩论 多年来 JavaScript 社区关于这是否是最佳实践的争论,我并不是提倡或反对它,只是指出它的存在。
定制格式化功能:
有关固定格式,一个简单的函数使工作。下面的示例生成的国际格式YYYY-MM-DD:
function dateToYMD(date) {
var d = date.getDate();
var m = date.getMonth() + 1;
var y = date.getFullYear();
return '' + y + '-' + (m<=9 ? '0' + m : m) + '-' + (d <= 9 ? '0' + d : d);
}
注意:它是,但是,通常不延长的Javascript标准库(例如,通过添加此功能,日期的原型)一个好主意。
一个更先进的功能,可以基于一个格式参数配置的输出。有几个很好的例子在这同一个页面。
如果写一个格式化功能过长,有大量文库的周围做的。一些其他的答案已经列举出来。但增加的依赖性也有它的反一部分。
标准的ECMAScript格式化功能:
由于较新版本的ECMAScript,所述Date
类有一些特定的格式的功能:
<强> toDateString 强>:执行依赖性的,仅示出了日期
的http:// WWW。 ecma-international.org/ecma-262/7.0/index.html#sec-date.prototype.todatestring
new Date().toDateString(); // e.g. "Fri Nov 11 2016"
<强> toISOString 强>:显示ISO 8601的日期和时间
的http:// WWW。 ecma-international.org/ecma-262/7.0/index.html#sec-date.prototype.toisostring
new Date().toISOString(); // e.g. "2016-11-21T08:00:00.000Z"
<强>的toJSON 强>:Stringifier为JSON。
的http:// WWW。 ecma-international.org/ecma-262/7.0/index.html#sec-date.prototype.tojson
new Date().toJSON(); // e.g. "2016-11-21T08:00:00.000Z"
<强> toLocaleDateString 强>:执行依赖性的,在区域设置格式的日期
的http:// WWW。 ecma-international.org/ecma-262/7.0/index.html#sec-date.prototype.tolocaledatestring
new Date().toLocaleDateString(); // e.g. "21/11/2016"
<强>的toLocaleString 强>:执行依赖性的,在区域设置格式的日期和时间
的http:// WWW。 ecma-international.org/ecma-262/7.0/index.html#sec-date.prototype.tolocalestring
new Date().toLocaleString(); // e.g. "21/11/2016, 08:00:00 AM"
<强> toLocaleTimeString 强>:执行依赖性的,在区域设置格式的时间
的http:// WWW。 ecma-international.org/ecma-262/7.0/index.html#sec-date.prototype.tolocaletimestring
new Date().toLocaleTimeString(); // e.g. "08:00:00 AM"
<强>的toString 强>:对于日期通用的toString
的http:// WWW。 ecma-international.org/ecma-262/7.0/index.html#sec-date.prototype.tostring
new Date().toString(); // e.g. "Fri Nov 11 2016 08:00:00 GMT+0100 (W. Europe Standard Time)"
注意:也可以生成定制输出出那些格式化功能:
new Date().toISOString().slice(0,10); // By @Image72, return YYYY-MM-DD
简短的回答
有没有"通用"的文件,javascript满足;每一浏览器,有javascript是一个真正的执行。然而,有一个标准,大多数现代浏览器倾向于遵循,这是EMCAScript标准;所写的标准字符串将采取最低限度修改的执行ISO8601的定义。
此外,还有第二套标准由 IETF 浏览器倾向于遵循,以及,其定义为时间戳在RFC2822.实际文件中可以找到的参考文献列表的底部。
从此你可以期待的基本功能,但是,什么是"应该"是本质上并不是什么"是"。我要去一个小小的深度与这种程序虽然,因为它似乎只有三个人实际回答了这个问题(斯科特,goofballLogic和佩勒即),给我,表明大多数人都不知道时会发生什么事情你创建一个日期对象。
长回答
那里是文件,其中列出的格式符支持通过日期()对象?
要回答这个问题,或通常甚至看起来对这个问题的答案,你需要知道javascript不是一种新的语言;它实际上是一个执行情况的写法,并遵循写的标准(但请注意,javascript实际上也预期这些标准;EMCAScript标准是建立关于早期执行LiveScript/JavaScript)。目前的写法标准是5.1(2011年);当时,这个问题最初要求(日'09)中,标准是3(4是被遗弃的),但是5被释放后不久后在2009年年底结束。这应该纲要的一个问题;什么样的标准javascript执行情况可以遵循,可能不反映实际到位,因为a)这是一个执行给予标准的,b)并非所有实现的一个标准是清教徒,以及c)功能就是没有公布同步的新标准为d)执行是一个不断进展中的工作
基本上,在处理javascript,你正在处理的一个衍生物(javascript具体的浏览器)的执行情况(javascript本身)。谷歌的V8发动机,例如,实现了写5.0,但Internet Explorer的JScript不试图符合任何写标准,但Internet Explorer9否符合写5.0.
当一个参数是通过以新的日期(),它蒙上这个功能原型:
new Date(value)
当两个或更多的参数是通过以新的日期(),它蒙上这个功能原型:
new Date (year, month [, date [, hours [, minutes [, seconds [, ms ] ] ] ] ] )
这两个功能应该看看熟悉的,但这并不立即回答你的问题什么可以量化作为一种可接受的"新格式化"的需要进一步的解释。当你传递一串新的日期(),它将呼吁所的原型(请注意我使用这个词 原型 松;该版本可以是单独的职能,或者它可以是部分有条件的声明在一个单一的功能)进 新的日期(value) 你的串的说法"的价值"的参数。这一功能将首先检查它是否是一个数字或一串。该文件为这种功能可以在这里找到:
http://www.ecma-international.org/ecma-262/5.1/#sec-15.9.3.2
从这一点,我们可以推断出,获得串的格式允许新的日期(价值),我们已经看法的日期。分析(string)。该文件为这种方法可以在这里找到:
http://www.ecma-international.org/ecma-262/5.1/#sec-15.9.4.2
我们可以进一步推断出这一日期,预期将在修改的ISO8601延长格式的规定,在这里:
http://www.ecma-international.org/ecma-262/5.1/#sec-15.9.1.15
然而,我们可以认识到从经验,javascript的日期对象接受其他格式(强制执行通过存在这个问题在第一个地方),这是好的,因为写允许实施具体格式。然而,仍然无法回答的问题是什么文件提供可用的格式,也不是什么格式实际上是允许的。我们要看看在谷歌的javascript执行情况,V8;请注意我不是暗示这是"最好的"javascript发动机(如何界定"最佳"或"良好")和一个不能假定的格式允许在V8表示所有格式,可供今天,但我认为这是公平承担他们跟随现代的期望。
谷歌的V8发动机,date.js,DateConstructor
https://code.google.com/p/v8/source/browse/trunk/src/date.js?r=18400#141
看DateConstructor功能,我们可以推断出,我们需要找到DateParse功能;然而,注意到"年"不是实际年和只是提到"年"的参数。
谷歌的V8发动机,date.js,DateParse
https://code.google.com/p/v8/source/browse/trunk/src/date.js?r=18400#270
这要求%DateParseString,这实际上是一个运行时能参考C++的功能。它是指以下列代码:
谷歌的V8发动机,runtime.cc,%DateParseString
https://code.google.com/p/v8/source/browse/trunk/src/runtime.cc?r=18400#9559
功能呼叫我们关注在这一功能是为DateParser::Parse();忽略的逻辑周围的这些功能的电话,这些都只是检查,以符合本类型的编码(ASCII和UC16).DateParser::分析是定义:
谷歌的V8发动机,dateparser-inl。h、DateParser::分析
https://code.google.com/p/v8/source/browse/trunk/src/dateparser-inl.h?r=18400#36
这是功能的实际定义的格式接受。从本质上讲,它将检查EMCAScript5.0ISO8601标准,如果它不符合标准,那么它将试图建立的新的基于传统格式。几个关键点的基础上的评论:
- 字之前的第一个号码,是不知道的分析器被忽略。
- 带括号的文字被忽略。
- 未签名的数字后的":"解释为"时间组件"。
- 未签名的数字,随后是"."被解释为一个"时间组成部分",并且必须遵循毫秒。
- 签名的数字后,按小时或每小时钟(如+5:15或+0515)被解释为的时区。
- 当宣布小时和分钟,你可以使用"hh:mm"或"hhmm".
- 词,表明一个时区被解释为一个时区。
- 所有其他数字解释为"日期的组件"。
- 所有的单词开头的第三个数字的一个月被解释为一个月。
- 你可以定义分钟时间在一起的两个格式:"hh:mm"或"hhmm".
- 符号"+","-"和无与伦比的")"不允许之后,一些已经处理。
- 项相匹配的多种格式(例如1970-01-01)进行处理作为符合标准的EMCAScript5.0ISO8601串。
因此,这应当足以给你一个基本思想的期望是什么时候路过一串入一个新的对象。你可以进一步扩大在这看着下面的说明书,Mozilla点在Safari开发网络(符合IETF RFC2822时间戳):
微软开发网络另外还提到一个额外标准的日期对象:通信机制详解-402,写国际化API规范,它是互补的写5.1标准(和未来的)。这可以在这里找到:
在任何情况下,这种援助应该强调的是,没有"文件"这一普遍表示的所有实现的javascript,但是仍有足够文件可以作出合理的感觉是什么字符串可接受的日期对象。相当的装载问题的当你想它,是吗?:P
参考文献
http://www.ecma-international.org/ecma-262/5.1/#sec-15.9.3.2
http://www.ecma-international.org/ecma-262/5.1/#sec-15.9.4.2
http://www.ecma-international.org/ecma-262/5.1/#sec-15.9.1.15
http://tools.ietf.org/html/rfc2822#page-14
http://www.ecma-international.org/ecma-402/1.0/
https://code.google.com/p/v8/source/browse/trunk/src/date.js?r=18400#141
https://code.google.com/p/v8/source/browse/trunk/src/date.js?r=18400#270
https://code.google.com/p/v8/source/browse/trunk/src/runtime.cc?r=18400#9559
https://code.google.com/p/v8/source/browse/trunk/src/dateparser-inl.h?r=18400#36
资源
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date
http://msdn.microsoft.com/en-us/library/ff743760(v=与94).aspx
请确保您结账 Datejs与JavaScript的日期打交道时。这是相当可观的,有据可查的,你可以在的toString功能时见>
修改强>:泰勒福赛斯指出,即datejs已过时。我用它在我当前的项目,并没有任何与它的麻烦,但是你应该意识到这一点,并考虑替代方案。
可以只扩大用新Date
方法format
Object作为由 meizz 指出,下面是作者给出的代码。和
这里是一个的jsfiddle 。
Date.prototype.format = function(format) //author: meizz
{
var o = {
"M+" : this.getMonth()+1, //month
"d+" : this.getDate(), //day
"h+" : this.getHours(), //hour
"m+" : this.getMinutes(), //minute
"s+" : this.getSeconds(), //second
"q+" : Math.floor((this.getMonth()+3)/3), //quarter
"S" : this.getMilliseconds() //millisecond
}
if(/(y+)/.test(format)) format=format.replace(RegExp.$1,
(this.getFullYear()+"").substr(4 - RegExp.$1.length));
for(var k in o)if(new RegExp("("+ k +")").test(format))
format = format.replace(RegExp.$1,
RegExp.$1.length==1 ? o[k] :
("00"+ o[k]).substr((""+ o[k]).length));
return format;
}
alert(new Date().format("yyyy-MM-dd"));
alert(new Date("january 12 2008 11:12:30").format("yyyy-MM-dd h:mm:ss"));
您引用的功能是不是标准的JavaScript,不可能是便携式跨浏览器的,因此不是好的做法。该的ECMAScript 3.0规范离开解析和输出格式功能最多JavaScript实现。 的ECMAScript 5 增添了ISO8601支持的一个子集。我相信你提到的toString()函数是在一个浏览器的创新(Mozilla的?)
若干文库提供例程广泛本地化支持参数化这一点,一些。您还可以检查出 dojo.date.locale 方法。
我在此非常简单的格式化器,它的切割/ N / pastable(已更新,更整洁版本):
function DateFmt(fstr) {
this.formatString = fstr
var mthNames = ["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];
var dayNames = ["Sun","Mon","Tue","Wed","Thu","Fri","Sat"];
var zeroPad = function(number) {
return ("0"+number).substr(-2,2);
}
var dateMarkers = {
d:['getDate',function(v) { return zeroPad(v)}],
m:['getMonth',function(v) { return zeroPad(v+1)}],
n:['getMonth',function(v) { return mthNames[v]; }],
w:['getDay',function(v) { return dayNames[v]; }],
y:['getFullYear'],
H:['getHours',function(v) { return zeroPad(v)}],
M:['getMinutes',function(v) { return zeroPad(v)}],
S:['getSeconds',function(v) { return zeroPad(v)}],
i:['toISOString']
};
this.format = function(date) {
var dateTxt = this.formatString.replace(/%(.)/g, function(m, p) {
var rv = date[(dateMarkers[p])[0]]()
if ( dateMarkers[p][1] != null ) rv = dateMarkers[p][1](rv)
return rv
});
return dateTxt
}
}
fmt = new DateFmt("%w %d:%n:%y - %H:%M:%S %i")
v = fmt.format(new Date())
框架自由,限制,但光
var d = (new Date()+'').split(' ');
// ["Tue", "Sep", "03", "2013", "21:54:52", "GMT-0500", "(Central", "Daylight", "Time)"]
[d[3], d[1], d[2], d[4]].join(' ');
// "2013 Sep 03 21:58:03"
DateJS肯定是全功能的,但我建议这更简单的LIB(JavaScript的日期格式)一>我喜欢仅仅是因为它只有120行左右。
已经通过几个在其他的答案中提供的选项看,我决定写我自己的有限,但简单的解决方案,别人也觉得很有用。
/**
* Format date as a string
* @param date - a date object (usually "new Date();")
* @param format - a string format, eg. "DD-MM-YYYY"
*/
function dateFormat(date, format) {
// Calculate date parts and replace instances in format string accordingly
format = format.replace("DD", (date.getDate() < 10 ? '0' : '') + date.getDate()); // Pad with '0' if needed
format = format.replace("MM", (date.getMonth() < 9 ? '0' : '') + (date.getMonth() + 1)); // Months are zero-based
format = format.replace("YYYY", date.getFullYear());
return format;
}
用法示例:
console.log("The date is: " + dateFormat(new Date(), "DD/MM/YYYY"));
下面是我用了很多的功能。其结果是YYYY-MM-DD HH:MM:ss.nnn
function date_and_time() {
var date = new Date();
//zero-pad a single zero if needed
var zp = function (val){
return (val <= 9 ? '0' + val : '' + val);
}
//zero-pad up to two zeroes if needed
var zp2 = function(val){
return val <= 99? (val <=9? '00' + val : '0' + val) : ('' + val ) ;
}
var d = date.getDate();
var m = date.getMonth() + 1;
var y = date.getFullYear();
var h = date.getHours();
var min = date.getMinutes();
var s = date.getSeconds();
var ms = date.getMilliseconds();
return '' + y + '-' + zp(m) + '-' + zp(d) + ' ' + zp(h) + ':' + zp(min) + ':' + zp(s) + '.' + zp2(ms);
}
你可以找到有用的这种修改的日期的对象,这比任何库,并且易于扩展到支持不同格式:
注:
- 它使用 对象。钥匙() 这是不确定的老年浏览器,因此可能需要实施提供填充代码自给链接。
代码
Date.prototype.format = function(format) {
// set default format if function argument not provided
format = format || 'YYYY-MM-DD hh:mm';
var zeropad = function(number, length) {
number = number.toString();
length = length || 2;
while(number.length < length)
number = '0' + number;
return number;
},
// here you can define your formats
formats = {
YYYY: this.getFullYear(),
MM: zeropad(this.getMonth() + 1),
DD: zeropad(this.getDate()),
hh: zeropad(this.getHours()),
mm: zeropad(this.getMinutes())
},
pattern = '(' + Object.keys(formats).join(')|(') + ')';
return format.replace(new RegExp(pattern, 'g'), function(match) {
return formats[match];
});
};
使用
var now = new Date;
console.log(now.format());
// outputs: 2015-02-09 11:47
var yesterday = new Date('2015-02-08');
console.log(yesterday.format('hh:mm YYYY/MM/DD'));
// outputs: 00:00 2015/02/08
只是为了继续gongzhitaao的坚实答案 - 这个处理AM / PM
Date.prototype.format = function (format) //author: meizz
{
var hours = this.getHours();
var ttime = "AM";
if(format.indexOf("t") > -1 && hours > 12)
{
hours = hours - 12;
ttime = "PM";
}
var o = {
"M+": this.getMonth() + 1, //month
"d+": this.getDate(), //day
"h+": hours, //hour
"m+": this.getMinutes(), //minute
"s+": this.getSeconds(), //second
"q+": Math.floor((this.getMonth() + 3) / 3), //quarter
"S": this.getMilliseconds(), //millisecond,
"t+": ttime
}
if (/(y+)/.test(format)) format = format.replace(RegExp.$1,
(this.getFullYear() + "").substr(4 - RegExp.$1.length));
for (var k in o) if (new RegExp("(" + k + ")").test(format))
format = format.replace(RegExp.$1,
RegExp.$1.length == 1 ? o[k] :
("00" + o[k]).substr(("" + o[k]).length));
return format;
}
我无法找到任何明确的文件有效期的格式,所以我写了我自己的测试,看看什么是支持在各种浏览器。
http://blarg.co.uk/blog/javascript-date-formats
我的结果得出结论如下格式是否有效,在所有浏览器,我测试了(例子使用的日期"第9月2013"):
[年]/[月]/[新编号] -一个月可以是数量有或没有一个领先的零或个月中的名称或长或短的格式、日期和数量,可以有或没有导致零。
- 2013/08/09
- 2013/08/9
- 2013/8/09
- 2013/8/9
- 2013年/月/09
- 2013年/月/9
- 2013/Aug/09
- 2013年/月/9
[月]/[年]/[新编号] -一个月可以是数量有或没有一个领先的零或个月中的名称或长或短的格式、日期和数量,可以有或没有导致零。
- 08/2013/09
- 08/2013/9
- 8/2013/09
- 8/2013/9
- 八月/2013/09
- 八月/2013/9
- Aug/2013/09
- Aug/2013/9
任何组合[完整的年份][月份名称]与[日期的数量]分隔的空间 -一个月的姓名可以在短期或长期的格式、日期和数量,可以有或没有导致零。
- 2013年八月09
- 2013年八月09
- 09 2013年八月
- 2013年八月09
- 八月9 2013年
- 2013年9月
- 等等...
还有"现代浏览器"(或者换句话说,所有的浏览器除外IE9和下文)
[年]-[一个月数量]-[新编号] -一个月的日期和数目必须包括领先的零(这是格式, MySQL日期的类型 使用)
- 2013-08-09
使用个月的名字:
有趣的是,当使用一个月的名字我发现,只有第3人物的名个月都没有使用,因此所有以下是完全有效:
new Date('9 August 2013');
new Date('9 Aug 2013');
new Date('9 Augu 2013');
new Date('9 Augustagfsdgsd 2013');
格式化和尤其解析日期在JavaScript可以是有点头疼。并非所有浏览器处理以同样的方式日期。因此,尽管是非常有用的了解基本方法,更切合实际使用辅助库。
在 XDate的javascript通过亚当肖库 一>已经出现了自2011年中期,并仍在积极发展。它有极好的文档中,大的API,格式化,试图保持向后兼容,甚至支持本地化字符串。
链接到更改区域的字符串: https://gist.github.com/1221376
实施例的代码:
var d = new Date();
var time = d.toISOString().replace(/.*?T(\d+:\d+:\d+).*/, "$1");
输出:
“13时45分20秒”
在库 sugar.js 具有与在JavaScript日期内一些强大的功能。这是非常好记录。
糖能Date类多的爱开始与Date.create 方法可以理解在几乎任何格式的日期在15大 语言,包括相关的格式,如“1小时前”。红枣能 也可以在任何格式输出或语言使用易于理解 语法,用快捷键常用的日期格式。复杂的日期 比较,也可以与像是方法,其中理解任何 格式并应用内置精度。
一个例子:
Date.create('July 4, 1776') -> July 4, 1776
Date.create(-446806800000) -> November 5, 1955
Date.create(1776, 6, 4) -> July 4, 1776
Date.create('1776年07月04日', 'ja') -> July 4, 1776
Date.utc.create('July 4, 1776', 'en') -> July 4, 1776
Date.create().format('{Weekday} {d} {Month}, {yyyy}') -> Monday July 4, 2003
Date.create().format('{hh}:{mm}') -> 15:57
Date.create().format('{12hr}:{mm}{tt}') -> 3:57pm
Date.create().format(Date.ISO8601_DATETIME) -> 2011-07-05 12:24:55.528Z
Date.create().is('the 7th of June') -> false
Date.create().addMonths(2); ->"Sunday, June 15, 2014 13:39"
所有的浏览器
最可靠的方式日期的格式与来源的格式,你使用的,适用下列步骤:
- 使用
new Date()
创建一个Date
对象 - 使用
.getDate()
,.getMonth()
和.getFullYear()
得到别的一天、月和年 - 贴拼在一起,根据你的目标格式
例如:
var date = '2015-11-09T10:46:15.097Z';
function format(input) {
var date = new Date(input);
return [
("0" + date.getDate()).slice(-2),
("0" + (date.getMonth()+1)).slice(-2),
date.getFullYear()
].join('/');
}
document.body.innerHTML = format(date); // OUTPUT : 09/11/2015
(也请参看 这小提琴).
现代浏览器只
你也可以使用的内在 .toLocaleDateString
法做到的格式。你只需要通过适当的区域和的选项相匹配的正确的格式,其不幸的是只是支持现代的浏览器 (*) :
var date = '2015-11-09T10:46:15.097Z';
function format(input) {
return new Date(input).toLocaleDateString('en-GB', {
year: 'numeric',
month: '2-digit',
day: '2-digit'
});
}
document.body.innerHTML = format(date); // OUTPUT : 09/11/2015
(也请参看 这小提琴).
(*) 根据MDN, "现代浏览器"的装置铬24+,火狐29+,internet explorer11,Edge12+、歌剧15+&野生动物园 晚间建立
只是另一种选择,这是我写的:
不知道这是否会帮助,但我发现它在几个项目有用的 - 看起来像它会做你需要什么
支持日期/时间的格式,日期数学(加/减日期份),日期比较,日期解析等它不受限制开源。
没有原因,如果你已经在使用一个框架(他们都能够)考虑它,但如果你只需要日期操作快速添加到项目给它一个机会。
格式化日期以返回“2012-12-29”的正确方法是使用以下脚本 JavaScript 日期格式:
var d1 = new Date();
return d1.format("dd-m-yy");
此代码不起作用:
var d1 = new Date();
d1.toString('yyyy-MM-dd');
如果您只想显示随时间的双的数字,这可能会帮助您:
var now = new Date();
var cHour = now.getHours();
var cMinuts = now.getMinutes();
var cSeconds = now.getSeconds();
var outStr = (cHour <= 0 ? ('0' + cHour) : cHour) + ':' + (cMinuts <= 9 ? ('0' + cMinuts) : cMinuts) + ':' + (cSeconds <= 9 ? '0' + cSeconds : cSeconds);
使用此功能
toTimeString() and toLocaleDateString()
参考下面链接查看更多细节 https://developer.mozilla.org/en-US /文档/网络/ JavaScript的/参考/ Global_Objects /日期
JsSimpleDateFormat 是可格式化库Date对象,并解析格式化字符串返回Date对象。它使用Java格式(的SimpleDateFormat类)。月和日的名称可以被本地化。
示例:
var sdf = new JsSimpleDateFormat("EEEE, MMMM dd, yyyy");
var formattedString = sdf.format(new Date());
var dateObject = sdf.parse("Monday, June 29, 2009");
答案是“无处”,因为日期格式是专有的功能。我不认为的toString功能是为了符合特定的格式。例如在ECMAScript的5.1规范( HTTP://www.ecma -international.org/publications/files/ECMA-ST/Ecma-262.pdf ,2013年2月8日,173页),的toString 如下功能进行了说明:
“的字符串的内容是依赖于实现的”
函数,如下面的样品可以被用来实现相当容易地格式化。
function pad(toPad, padWith) {
return (String(padWith) + String(toPad)).slice(-1 * padWith.length);
}
function dateAsInputValue(toFormat) {
if(!(toFormat instanceof Date)) return null;
return toFormat.getFullYear() + "-" + pad(toFormat.getMonth() + 1, "00") + "-" + pad(toFormat.getDate(), "00");
}
function timeAsInputValue(toFormat) {
if(!(toFormat instanceof Date)) return null;
return pad(toFormat.getHours(), "00") + ":" + pad(toFormat.getMinutes(), "00") + ":" + pad(toFormat.getSeconds(), "00");
}
如果你并不需要所有的功能,如 Moment.js 介绍,那么你可以使用库我港的strftime 。它的重量轻(1.35 KB与57.9 KB缩小的相比Moment.js 2.15.0),并提供大部分strftime()
的功能。
/* Port of strftime(). Compatibility notes:
*
* %c - formatted string is slightly different
* %D - not implemented (use "%m/%d/%y" or "%d/%m/%y")
* %e - space is not added
* %E - not implemented
* %h - not implemented (use "%b")
* %k - space is not added
* %n - not implemented (use "\n")
* %O - not implemented
* %r - not implemented (use "%I:%M:%S %p")
* %R - not implemented (use "%H:%M")
* %t - not implemented (use "\t")
* %T - not implemented (use "%H:%M:%S")
* %U - not implemented
* %W - not implemented
* %+ - not implemented
* %% - not implemented (use "%")
*
* strftime() reference:
* http://man7.org/linux/man-pages/man3/strftime.3.html
*
* Day of year (%j) code based on Joe Orost's answer:
* http://stackoverflow.com/questions/8619879/javascript-calculate-the-day-of-the-year-1-366
*
* Week number (%V) code based on Taco van den Broek's prototype:
* http://techblog.procurios.nl/k/news/view/33796/14863/calculate-iso-8601-week-and-year-in-javascript.html
*/
function strftime(sFormat, date) {
if (!(date instanceof Date)) date = new Date();
var nDay = date.getDay(),
nDate = date.getDate(),
nMonth = date.getMonth(),
nYear = date.getFullYear(),
nHour = date.getHours(),
aDays = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],
aMonths = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],
aDayCount = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334],
isLeapYear = function() {
if (nYear&3!==0) return false;
return nYear%100!==0 || year%400===0;
},
getThursday = function() {
var target = new Date(date);
target.setDate(nDate - ((nDay+6)%7) + 3);
return target;
},
zeroPad = function(nNum, nPad) {
return ('' + (Math.pow(10, nPad) + nNum)).slice(1);
};
return sFormat.replace(/%[a-z]/gi, function(sMatch) {
return {
'%a': aDays[nDay].slice(0,3),
'%A': aDays[nDay],
'%b': aMonths[nMonth].slice(0,3),
'%B': aMonths[nMonth],
'%c': date.toUTCString(),
'%C': Math.floor(nYear/100),
'%d': zeroPad(nDate, 2),
'%e': nDate,
'%F': date.toISOString().slice(0,10),
'%G': getThursday().getFullYear(),
'%g': ('' + getThursday().getFullYear()).slice(2),
'%H': zeroPad(nHour, 2),
'%I': zeroPad((nHour+11)%12 + 1, 2),
'%j': zeroPad(aDayCount[nMonth] + nDate + ((nMonth>1 && isLeapYear()) ? 1 : 0), 3),
'%k': '' + nHour,
'%l': (nHour+11)%12 + 1,
'%m': zeroPad(nMonth + 1, 2),
'%M': zeroPad(date.getMinutes(), 2),
'%p': (nHour<12) ? 'AM' : 'PM',
'%P': (nHour<12) ? 'am' : 'pm',
'%s': Math.round(date.getTime()/1000),
'%S': zeroPad(date.getSeconds(), 2),
'%u': nDay || 7,
'%V': (function() {
var target = getThursday(),
n1stThu = target.valueOf();
target.setMonth(0, 1);
var nJan1 = target.getDay();
if (nJan1!==4) target.setMonth(0, 1 + ((4-nJan1)+7)%7);
return zeroPad(1 + Math.ceil((n1stThu-target)/604800000), 2);
})(),
'%w': '' + nDay,
'%x': date.toLocaleDateString(),
'%X': date.toLocaleTimeString(),
'%y': ('' + nYear).slice(2),
'%Y': nYear,
'%z': date.toTimeString().replace(/.+GMT([+-]\d+).+/, '$1'),
'%Z': date.toTimeString().replace(/.+\((.+?)\)$/, '$1')
}[sMatch] || sMatch;
});
}
<强>示例用法:强>
strftime('%F'); // Returns "2016-09-15"
strftime('%A, %B %e, %Y'); // Returns "Thursday, September 15, 2016"
// You can optionally pass it a Date object...
strftime('%x %X', new Date('1/1/2016')); // Returns "1/1/2016 12:00:00 AM"
最新的代码是可用这里: https://github.com/thdoan/strftime
就我个人而言,因为我同时使用 PHP 和 jQuery/javascript,所以我使用 php.js 中的日期函数 http://phpjs.org/functions/date/
使用与我已经知道的格式字符串相同的库对我来说更容易,并且包含日期函数的所有格式字符串可能性的手册当然可以在 php.net 上在线找到
您只需使用您首选的方法将 date.js 文件包含在 HTML 中,然后像这样调用它:
var d1=new Date();
var datestring = date('Y-m-d', d1.valueOf()/1000);
如果需要,您可以使用 d1.getTime() 而不是 valueOf(),它们做同样的事情。
javascript 时间戳除以 1000 是因为 javascript 时间戳以毫秒为单位,而 PHP 时间戳以秒为单位。
许多框架(你可能已经在使用)具有新的格式,你可能不知道的。jQueryUI已经提及,但其他框架,例如 剑道UI(全球化), 雅虎UI(率) 和 人们的生活产生了重要 有他们。
// 11/6/2000
kendo.toString(new Date(value), "d")
// Monday, November 06, 2000
kendo.toString(new Date(2000, 10, 6), "D")