javascript - JavaScript格式化某个日期?

  显示原文与译文双语对照的内容

我注意到 new Date()的javascript函数在接受几种格式的日期时非常聪明。


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来格式化日期对象到字符串。

编辑器:注。下面的方法是尝试直接asker该在从事一个特定的浏览器,但并不 一般工作;看到答案在本页,看看一些实际的解决方案。

今天,我在date日期对象on上使用了 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

例如:


<script type="text/javascript">
 var d = new Date();
 var curr_date = d.getDate();
 var curr_month = d.getMonth() + 1;//Months are zero based
 var curr_year = d.getFullYear();
 document.write(curr_date +"-" + curr_month +"-" + curr_year);
</script>

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.3 KB缩小+ 在最小可能的设置( 2014 )

如果你已经在项目中使用了 jQuery UI,则可以使用内置的datepicker方法格式化日期对象:


$.datepicker.formatDate('yy-mm-dd', new Date(2007, 1 - 1, 26));

但是,datepicker只格式化日期,不能格式化时间。

查看 jQuery UI datepicker formatDate,示例。

列出 Date() 对象支持的格式说明符的文档?

我今天无意中发现了这一点,很惊讶没有人花时间回答这个简单问题。 确,有很多库可以帮助处理日期操作。 有些比其他的好一些。 但问题不是这个问题。

) 就我所知,纯JavaScript不支持格式说明符 你已经指明你希望使用它们的方式。 但是它支持格式化日期和/或者时间的方法,比如 .toLocaleDateString().toLocaleTimeString().toUTCString()

我最常使用的Date 对象引用位于 w3schools.com 网站 ( 但是一个快速搜索会显示更多更符合你需求的) 。

还具有自定义methods,请注意,对象属性 日期部分,它提供了指向 prototype,它描述了某些方面可以扩展的日期 object. 多年来,JavaScript社区中有一些关于的争论,关于这是否是最佳实践,我不提倡或者反对它,只是指出它的存在。


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中的日期时确保签出 Datejs 。 以防 toString函数,它是相当令人印象深刻的和并且有充足的文档可以看看。

编辑: Tyler Forsythe指出,datejs已经过时。 我在当前的项目中使用了它,但没有任何问题,但是你应该注意并考虑其他问题。

你可以只展开 Date 对象用新 format 方法如前所通过 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规范 web 将解析和输出格式保留为Javascript实现。 ECMAScript 5 添加ISO8601支持的子集。 我相信你提到的toString() 函数是一个浏览器的创新( Mozilla)?

一些库提供了参数化例程,有些库具有广泛的本地化支持。 你还可以查看 dojo.date.locale 中的方法。

...