在哪里可以找到有关在JavaScript中格式化日期的文档?[关闭]

我注意到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()date对象上使用了该方法,令人惊讶的是,它用于将date格式化为字符串的目的。

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

同样在这里,我找不到关于将日期对象格式化为字符串的所有方式的任何文档。

Where is the documentation which lists the format specifiers supported by the Date() object?

小胖A2020/03/09 21:00:54

许多框架(您可能已经在使用)具有您可能不知道的日期格式。已经提到jQueryUI,但是Kendo UI(全球化)Yahoo UI(Util)AngularJS等其他框架也有它们。

// 11/6/2000
kendo.toString(new Date(value), "d")

// Monday, November 06, 2000
kendo.toString(new Date(2000, 10, 6), "D")
2020/03/09 21:00:54

答案是“无处”,因为日期格式是专有功能。我不认为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");
}
神无阿飞古一2020/03/09 21:00:54

我写的另一种选择是:

DP_DateExtensions库

不确定是否会有所帮助,但是我发现它在几个项目中很有用-看起来它将满足您的需求。

支持日期/时间格式,日期数学(添加/减去日期部分),日期比较,日期解析等。它是开源的。

如果您已经在使用框架(它们都有能力),则没有理由考虑它,但是如果您只需要快速将日期操作添加到项目中,则可以给它一个机会。

斯丁Jim2020/03/09 21:00:54

使用此功能

toTimeString() and toLocaleDateString()

请参阅下面的链接以获取更多详细信息 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date

古一飞云2020/03/09 21:00:54

JsSimpleDateFormat是一个库,可以格式化日期对象并将已格式化的字符串解析回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");
ProTom2020/03/09 21:00:54

示例代码:

var d = new Date();
var time = d.toISOString().replace(/.*?T(\d+:\d+:\d+).*/, "$1");

输出:

“ 13:45:20”

樱泡芙2020/03/09 21:00:54

只是为了继续恭敬待议的可靠答案-这可以处理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;
}
JinJin猪猪2020/03/09 21:00:54

在JavaScript中格式化日期(尤其是解析日期)可能会有些麻烦。并非所有浏览器都以相同方式处理日期。因此,虽然了解基本方法很有用,但使用帮助程序库更为实用。

XDate JavaScript库亚当·肖自2011年中期已经出现,并仍在积极发展。它具有出色的文档,出色的API,格式,试图保持向后兼容,甚至支持本地化字符串。

链接到更改区域设置字符串:https : //gist.github.com/1221376

成天2020/03/09 21:00:54

DateJS当然功能齐全,但是我建议使用这种更简单的lib(JavaScript日期格式),我更喜欢它,因为它只有120行左右。

Davaid阳光伽罗2020/03/09 21:00:54

您可以Date使用meizzformat指出的新方法来扩展Object ,以下是作者提供的代码。这是一个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"));
十三猴子2020/03/09 21:00:54

无框架,有限但轻巧

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"
达蒙逆天Pro2020/03/09 21:00:54

您引用的功能不是标准Javascript,不太可能跨浏览器移植,因此不是很好的做法。ECMAScript的3规格叶解析和输出格式功能到Javascript实现。 ECMAScript 5添加了一部分ISO8601支持。我相信您提到的toString()函数是一种浏览器(Mozilla?)的创新。

一些库提供了用于对此参数化的例程,其中一些具有广泛的本地化支持。您也可以在dojo.date.locale中检出方法

梅古一2020/03/09 21:00:54

确保在JavaScript中处理日期时签出DatejstoString函数的情况下,它令人印象深刻且有据可查

编辑:泰勒·福赛斯指出,datejs已过时。我在当前项目中使用了它,但没有任何问题,但是您应该意识到这一点并考虑替代方法。

6的不行2020/03/09 21:00:54

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

我今天偶然发现了这个问题,很惊讶没有人花时间回答这个简单的问题。的确,有许多库可以帮助您进行日期操作。有些比其他更好。但这不是问的问题。

AFAIK,纯JavaScript不支持指定要使用的格式说明符但它支持的方法格式化日期和/或时间,如.toLocaleDateString().toLocaleTimeString().toUTCString()

Date我最常使用对象参考位于w3schools.com网站上(但是Google的快速搜索将显示更多可以更好地满足您的需求的对象)。

还要注意,“ 日期对象属性”部分提供了的链接prototype,该链接说明了使用自定义方法扩展Date对象的一些方法。多年来,JavaScript社区一直在争论这是否是最佳做法,我并不主张或反对它,只是指出它的存在。

Harry古一2020/03/09 21:00:54

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并压缩了文件(2014年2月)

阿飞猿2020/03/09 21:00:54

我喜欢使用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);