我注意到JavaScript的新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。
编者按:以下方法是询问者在特定浏览器上的尝试,但通常不起作用;请参阅本页上的答案以了解一些实际解决方案。
今天,我在date对象上使用了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()对象支持的格式说明符的文档在哪里?
您可能会发现日期对象的这种修改很有用,它比任何库都小,并且可以轻松扩展以支持不同的格式:
注:
它使用Object.keys(),这在旧浏览器中是未定义的,所以您可能需要从给定的链接实现polyfill。
CODE
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];
});
};
USE
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
请参阅dtmFRM.js。如果您熟悉C#的自定义日期和时间格式字符串,这个库应该做完全相同的事情。
演示:
var format = new dtmFRM();
var now = new Date().getTime();
$('#s2').append(format.ToString(now,"This month is : MMMM") + "</br>");
$('#s2').append(format.ToString(now,"Year is : y or yyyy or yy") + "</br>");
$('#s2').append(format.ToString(now,"mm/yyyy/dd") + "</br>");
$('#s2').append(format.ToString(now,"dddd, MM yyyy ") + "</br>");
$('#s2').append(format.ToString(now,"Time is : hh:mm:ss ampm") + "</br>");
$('#s2').append(format.ToString(now,"HH:mm") + "</br>");
$('#s2').append(format.ToString(now,"[ddd,MMM,d,dddd]") + "</br></br>");
now = '11/11/2011 10:15:12' ;
$('#s2').append(format.ToString(now,"MM/dd/yyyy hh:mm:ss ampm") + "</br></br>");
now = '40/23/2012'
$('#s2').append(format.ToString(now,"Year is : y or yyyy or yy") + "</br></br>");
sugar.js库有一些很棒的功能,可以在JavaScript中处理日期。它有很好的记录。
Sugar从Date.create开始就给了Date类很多爱可以理解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"
动量.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月)
所有浏览器
使用所使用的源格式格式化日期的最可靠方法是应用以下步骤:
使用new Date()创建Date对象使用.getDate()、.getMonth()和.getFullYear()分别获取日期、月份和年份根据目标格式将碎片粘贴在一起
例子:
var date='2015-11-09T10:46:15.097Z';函数格式(输入){var date=新日期(输入);返回[(“0”+date.getDate()).sslice(-2),(“0”+(date.getMonth()+1)).sslice(-2),date.getFullYear()].ejoin('/');}document.body.innerHTML=格式(日期);//产量:2015年9月11日
(另请参见此Fiddle)。
仅限现代浏览器
您还可以使用内置的.toLocaleDateString方法为您进行格式化。您只需要传递正确的区域设置和选项以匹配正确的格式,不幸的是,只有现代浏览器才支持这种格式(*):
var date='2015-11-09T10:46:15.097Z';函数格式(输入){返回新日期(输入).toLocaleDateString('en-GB'{年份:'数字',月份:'2-位',天:'2位数'});}document.body.innerHTML=格式(日期);//产量:2015年9月11日
(另请参见此Fiddle)。
(*)根据MDN,“现代浏览器”是指Chrome 24+、Firefox 29+、IE11、Edge12+、Opera 15+和Safari夜间版本