在哪里可以找到有关使用 JavaScript 格式化日期的文档?
- 2024-11-02 21:00:00
- admin 原创
- 54
问题描述:
我注意到 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()
?
解决方案 1:
我喜欢使用 JavaScript和使用日期来格式化时间和日期的 10 种方法。
基本上,您有三种方法,您必须自己组合字符串:
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);
运行代码片段Hide results展开片段
解决方案 2:
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"
()轻量级意味着在最小的可能设置中压缩 + gzip 压缩后大小为 9.3KB(2014 年 2 月)*
解决方案 3:
如果您已经在项目中使用jQuery UI,则可以使用内置的 datepicker 方法来格式化您的日期对象:
$.datepicker.formatDate('yy-mm-dd', new Date(2007, 1 - 1, 26));
但是,日期选择器只能格式化日期,而不能格式化时间。
查看jQuery UI datepicker formatDate 的示例。
解决方案 4:
自定义格式化功能:
对于固定格式,一个简单的函数就可以完成工作。以下示例生成国际格式 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 标准库(例如将此函数添加到 Date 的原型中)通常不是一个好主意。
更高级的函数可以根据格式参数生成可配置的输出。同一页面中有几个很好的例子。
如果编写格式化函数太长,有很多库可以做到这一点。其他一些答案已经列举了它们。但增加依赖性也有其反面。
标准 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: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
解决方案 5:
列出对象支持的格式说明符的文档在哪里
Date()
?
我今天偶然发现了这个问题,很惊讶没有人花时间回答这个简单的问题。确实,有很多库可以帮助处理日期。有些库比其他库更好。但这不是问题所在。
据我所知,纯 JavaScript 不支持您所指出的格式说明符。但它支持格式化日期和/或时间的方法,例如.toLocaleDateString()
、.toLocaleTimeString()
和.toUTCString()
。
Date
我最常用的对象引用是在 w3schools.com 网站上(但快速的 Google 搜索将会发现更多可能更能满足您需求的内容)。
另请注意,日期对象属性部分提供了指向的链接prototype
,其中说明了使用自定义方法扩展日期对象的一些方法。多年来,JavaScript 社区一直存在一些关于这是否是最佳实践的争论,我并不赞成或反对它,只是指出它的存在。
解决方案 6:
简短答案
没有适用于 JavaScript 的“通用”文档;每个具有 JavaScript 的浏览器实际上都是一个实现。但是,大多数现代浏览器都倾向于遵循一个标准,那就是 EMCAScript 标准;ECMAScript 标准字符串至少会采用 ISO 8601 定义的修改实现。
除此之外,IETF还制定了第二个标准,浏览器也倾向于遵循该标准,即 RFC 2822 中对时间戳的定义。实际文档可在底部的参考列表中找到。
从这里您可以期待基本的功能,但“应该”是什么并不一定是“是”的。不过,我将从程序上深入探讨这个问题,因为似乎只有三个人真正回答了这个问题(分别是 Scott、goofballLogic 和 peller),在我看来,这表明大多数人并不知道创建 Date 对象时实际上会发生什么。
详细答案
列出 Date() 对象支持的格式说明符的文档在哪里?
要回答这个问题,或者通常甚至寻找这个问题的答案,您需要知道 javascript 不是一种新语言;它实际上是 ECMAScript 的一个实现,并遵循 ECMAScript 标准(但请注意,javascript 实际上也早于这些标准;EMCAScript 标准是基于 LiveScript/JavaScript 的早期实现而建立的)。当前的 ECMAScript 标准是 5.1(2011 年);在最初提出这个问题时(2009 年 6 月),标准是 3(4 被放弃),但 5 在 2009 年底发布后不久就发布了。这应该概述了一个问题;javascript 实现可能遵循的标准可能无法反映实际存在的标准,因为 a) 它是给定标准的实现,b) 并非所有标准的实现都是清教徒式的,并且 c) 功能不会与新标准同步发布,因为 d) 实现是一项持续进行的工作
本质上,在处理 javascript 时,您是在处理实现(javascript 本身)的派生(特定于浏览器的 javascript)。例如,Google 的 V8 实现了 ECMAScript 5.0,但 Internet Explorer 的 JScript 并不试图遵循任何 ECMAScript 标准,而 Internet Explorer 9 确实遵循 ECMAScript 5.0。
当将单个参数传递给 new Date() 时,它会转换此函数原型:
new Date(value)
当向 new Date() 传递两个或更多参数时,它会转换此函数原型:
new Date (year, month [, date [, hours [, minutes [, seconds [, ms ] ] ] ] ] )
这两个函数看起来应该很熟悉,但这并不能立即回答您的问题,而什么是可接受的“日期格式”则需要进一步解释。当您将字符串传递给 new Date() 时,它将调用 new Date(value) 的原型(请注意,我松散地使用原型这个词;版本可能是单独的函数,也可能是单个函数中条件语句的一部分),并使用您的字符串作为“value”参数的参数。此函数将首先检查它是数字还是字符串。此函数的文档可在此处找到:
http://www.ecma-international.org/ecma-262/5.1/#sec-15.9.3.2
由此,我们可以推断,要获取 new Date(value) 允许的字符串格式,我们必须查看方法 Date.parse(string)。此方法的文档可在此处找到:
http://www.ecma-international.org/ecma-262/5.1/#sec-15.9.4.2
我们可以进一步推断,日期应采用修改后的 ISO 8601 扩展格式,如下所示:
http://www.ecma-international.org/ecma-262/5.1/#sec-15.9.1.15
但是,我们可以从经验中认识到,javascript 的 Date 对象接受其他格式(首先由这个问题的存在所强制),这是可以接受的,因为 ECMAScript 允许特定于实现的格式。但是,这仍然没有回答有关可用格式的文档是什么,也没有回答实际允许使用哪些格式的问题。我们将研究 Google 的 javascript 实现 V8;请注意,我并不是说这是“最佳”的 javascript 引擎(如何定义“最佳”甚至“好”),也不能假设 V8 中允许的格式代表当今可用的所有格式,但我认为可以公平地假设它们确实符合现代期望。
Google 的 V8、date.js、DateConstructor
https://code.google.com/p/v8/source/browse/trunk/src/date.js?r=18400#141
查看 DateConstructor 函数,我们可以推断出我们需要找到 DateParse 函数;但是,请注意“year”不是实际年份,只是对“year”参数的引用。
Google 的 V8、date.js、DateParse
https://code.google.com/p/v8/source/browse/trunk/src/date.js?r=18400#270
这将调用 %DateParseString,它实际上是 C++ 函数的运行时函数引用。它引用以下代码:
Google 的 V8、runtime.cc、%DateParseString
https://code.google.com/p/v8/source/browse/trunk/src/runtime.cc?r=18400#9559
我们在此函数中关注的函数调用是 DateParser::Parse();忽略围绕这些函数调用的逻辑,这些只是检查是否符合编码类型(ASCII 和 UC16)。DateParser::Parse 定义如下:
Google 的 V8、dateparser-inl.h、DateParser::Parse
https://code.google.com/p/v8/source/browse/trunk/src/dateparser-inl.h?r=18400#36
这是实际定义其接受的格式的函数。本质上,它会检查 EMCAScript 5.0 ISO 8601 标准,如果不符合标准,则它将尝试根据旧格式构建日期。根据评论,以下是几个关键点:
第一个数字之前解析器不知道的单词将被忽略。
括号内的文本将被忽略。
无符号数字后跟“:”被解释为“时间部分”。
无符号数字后跟“。”被解释为“时间部分”,并且后面必须跟毫秒。
带符号的数字后跟小时或小时分钟(例如 +5:15 或 +0515)被解释为时区。
声明小时和分钟时,可以使用“hh:mm”或“hhmm”。
表示时区的词语将被解释为时区。
所有其他数字都被解释为“日期部分”。
所有以月份的前三位数字开头的字都被解释为月份。
您可以使用以下两种格式同时定义分钟和小时:“hh:mm”或“hhmm”。
数字处理后不允许出现“+”,“-”和不匹配的“)”等符号。
符合多种格式(例如 1970-01-01)的项目将被处理为符合标准的 EMCAScript 5.0 ISO 8601 字符串。
因此,这足以让您对将字符串传递到 Date 对象时会发生什么有一个基本的了解。您可以通过查看 Mozilla 在 Mozilla 开发者网络上指出的以下规范(符合 IETF RFC 2822 时间戳)来进一步扩展这一点:
Microsoft Developer Network 还提到了 Date 对象的另一个标准:ECMA-402,即 ECMAScript 国际化 API 规范,它是对 ECMAScript 5.1 标准(以及未来标准)的补充。可以在这里找到:
无论如何,这应该有助于强调,没有一份“文档”可以普遍代表所有 javascript 实现,但仍有足够的文档可以合理地理解哪些字符串可以用于 Date 对象。仔细想想,这是一个相当有深度的问题,对吧?: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
https://www.rfc-editor.org/rfc/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=vs.94).aspx
解决方案 7:
在 JavaScript 中处理日期时,请务必查看Datejs。它非常令人印象深刻,并且文档齐全,正如您在toString 函数中看到的那样。
编辑:Tyler Forsythe 指出,datejs 已经过时了。我在当前项目中使用它,没有遇到任何问题,但是您应该意识到这一点并考虑替代方案。
解决方案 8:
您可以像meizz指出的那样,Date
使用新方法扩展对象,下面是作者提供的代码。这是一个jsfiddle。format
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"));
解决方案 9:
您引用的功能不是标准的 Javascript,不太可能跨浏览器移植,因此不是好的做法。ECMAScript 3 规范将解析和输出格式功能留给了 Javascript 实现。ECMAScript 5添加了 ISO8601 支持的子集。我相信您提到的 toString() 函数是某个浏览器(Mozilla?)的一项创新
有多个库提供了参数化此方法的例程,其中一些库具有广泛的本地化支持。您还可以查看dojo.date.locale中的方法。
解决方案 10:
我制作了这个非常简单的格式化程序,它可以剪切/粘贴(已更新为更简洁的版本):
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())
http://snipplr.com/view/66968.82825/
解决方案 11:
不受框架限制,功能有限但轻量
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"
解决方案 12:
DateJS 确实是功能齐全的,但我推荐这个简单得多的库(JavaScript 日期格式),我更喜欢它,因为它只有 120 行左右。
解决方案 13:
查看了其他答案中提供的几个选项后,我决定编写自己的有限但简单的解决方案,其他人可能也会觉得有用。
/**
* 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"));
解决方案 14:
这是我经常使用的函数。结果是 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);
}
解决方案 15:
您可能会发现这种日期对象的修改很有用,它比任何库都小,并且易于扩展以支持不同的格式:
笔记:
它使用在旧版浏览器中未定义的Object.keys(),因此您可能需要从给定的链接实现 polyfill。
代码
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
解决方案 16:
所有浏览器
使用您所使用的源格式格式化日期的最可靠方法是应用以下步骤:
用于
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
运行代码片段Hide results展开片段
(另请参阅这个 Fiddle)。
仅限现代浏览器
您还可以使用内置.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
运行代码片段Hide results展开片段
(另请参阅这个 Fiddle)。
(*) 根据 MDN,“现代浏览器”是指 Chrome 24+、Firefox 29+、IE11、Edge12+、Opera 15+ 和 Safari每日构建版本
解决方案 17:
继续 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;
}
解决方案 18:
我无法找到有关有效日期格式的任何权威文档,因此我编写了自己的测试来查看各种浏览器支持的内容。
http://blarg.co.uk/blog/javascript-date-formats
我的结果显示,以下格式在我测试的所有浏览器中均有效(示例使用日期“2013 年 8 月 9 日”):
[全年]/[月份]/[日期数字] - 月份可以是带或不带前导零的数字,也可以是短格式或长格式的月份名称,日期数字可以带或不带前导零。
2013/08/09
2013/08/9
2013/8/09
2013/8/9
2013/8月/09
2013/8月/9
2013/8/09
2013/8/9
[月份]/[全年]/[日期数字] - 月份可以是带或不带前导零的数字,也可以是短格式或长格式的月份名称,日期数字可以带或不带前导零。
2013 年 8 月 9 日
2013 年 8 月 9 日
2013 年 8 月 9 日
2013 年 8 月 9 日
八月/2013/09
2013 年 8 月 9 日
2013 年 8 月 9 日
2013 年 8 月 9 日
[完整年份]、[月份名称] 和 [日期数字] 的任意组合,以空格分隔- 月份名称可以是短格式或长格式,日期数字可以带或不带前导零。
2013 年 8 月 9 日
2013 年 8 月 9 日
2013 年 8 月 9 日
2013 年 8 月 9 日
2013 年 8 月 9 日
2013 年 8 月 9 日
ETC...
在“现代浏览器”中也有效(换句话说,除 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');
解决方案 19:
在 JavaScript 中格式化和解析日期可能有点令人头疼。并非所有浏览器都以相同的方式处理日期。因此,虽然了解基本方法很有用,但使用辅助库更为实用。
Adam Shaw编写的XDate javascript 库自2011 年中期就已问世,目前仍在积极开发中。它拥有出色的文档、出色的 API 和格式,努力保持向后兼容,甚至支持本地化字符串。
更改语言环境字符串的链接:https://gist.github.com/1221376
解决方案 20:
示例代码:
var d = new Date();
var time = d.toISOString().replace(/.*?T(d+:d+:d+).*/, "$1");
输出:
“13:45:20”
解决方案 21:
sugar.js库具有一些用于处理 JavaScript 日期的出色功能。并且它有非常完善的文档。
Sugar 为 Date 类提供了许多功能,首先是 Date.create 方法,它可以理解 15 种主要语言中几乎任何格式的日期,包括“1 小时前”等相对格式。还可以使用易于理解的语法以任何格式或语言输出日期,并提供常用日期格式的快捷方式。还可以使用 is 等方法进行复杂的日期比较,这些方法可以理解任何格式并应用内置精度。
举几个例子:
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"
解决方案 22:
这只是另一个选择,我写道:
DP_DateExtensions 库
不确定它是否有帮助,但我发现它在几个项目中很有用 - 看起来它能满足你的需要。
支持日期/时间格式、日期数学(添加/减去日期部分)、日期比较、日期解析等。它是自由开源的。
如果您已经在使用框架(它们都功能强大),则没有理由考虑它,但如果您只需要快速向项目添加日期操作,那就给它一个机会。
解决方案 23:
如果您只想显示两位数的时间,这可能会对您有所帮助:
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);
解决方案 24:
使用此功能
toTimeString() and toLocaleDateString()
有关更多详细信息,请参阅以下链接
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date
解决方案 25:
现在几乎所有现代浏览器都支持toLocaleString(locales, options)
&,toLocaleDateString(locales, options)
其中options
是一个可选参数,用于指定格式。
例子:
const event = new Date(Date.UTC(2012, 11, 20, 3, 0, 0));
const options = { weekday: 'long', year: 'numeric', month: 'long', day: 'numeric' };
console.log(event.toLocaleDateString(undefined, options));
// expected output: Thursday, December 20, 2012 (varies according to default locale)
根据tc39.es/ecma402和w3c.org,以下是支持的参数值列表:
区域设置:
ar-SA
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,bn-BD
bn-IN
cs-CZ
da-DK
de-AT
de-CH
de-DE
el-GR
en-AU
en-CA
en-GB
en-IE
en-IN
en-NZ
en-US
en-ZA
es-AR
es-CL
es-CO
es-ES
es-MX
es-US
fi-FI
fr-BE
fr-CA
fr-CH
fr-FR
he-IL
hi-IN
hu-HU
id-ID
it-CH
it-IT
ja-JP
ko-KR
nl-BE
nl-NL
no-NO
pl-PL
pt-BR
pt-PT
ro-RO
ru-RU
sk-SK
sv-SE
ta-IN
ta-LK
th-TH
tr-TR
zh-CN
, zh-HK
,zh-TW
选项:
内部插槽 | 财产 | 价值观 |
---|---|---|
[[工作日]] | “工作日” | “窄”、“短”、“长” |
[[时代]] | “时代” | “窄”、“短”、“长” |
[[年]] | “年” | “2 位数字”、“数字” |
[[月]] | “月” | “2 位数字”、“数字”、“窄”、“短”、“长” |
[[天]] | “天” | “2 位数字”、“数字” |
[[日期间]] | “dayPeriod” | “窄”、“短”、“长” |
[[小时]] | “小时” | “2 位数字”、“数字” |
[[分钟]] | “分钟” | “2 位数字”、“数字” |
[[第二]] | “第二” | “2 位数字”、“数字” |
[[秒的小数部分]] | “小数秒数” | 1 |
- 2024年20款好用的项目管理软件推荐,项目管理提效的20个工具和技巧
- 2024年开源项目管理软件有哪些?推荐5款好用的项目管理工具
- 项目管理软件有哪些?推荐7款超好用的项目管理工具
- 项目管理软件哪个最好用?盘点推荐5款好用的项目管理工具
- 项目管理软件有哪些最好用?推荐6款好用的项目管理工具
- 项目管理软件有哪些,盘点推荐国内外超好用的7款项目管理工具
- 2024项目管理软件排行榜(10类常用的项目管理工具全推荐)
- 项目管理软件排行榜:2024年项目经理必备5款开源项目管理软件汇总
- 2024年常用的项目管理软件有哪些?推荐这10款国内外好用的项目管理工具
- 项目管理必备:盘点2024年13款好用的项目管理软件