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

2020/09/17 07:31 · javascript ·  · 0评论

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

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()对象支持的格式说明符的文档在哪里

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

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月)

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

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

但是,日期选择器仅格式化日期,而不能格式化时间。

看一下jQuery UI datepicker formatDate的示例。

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

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

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

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

还要注意,“ 日期对象属性”部分提供了的链接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标准库通常不是一个好主意(例如,通过将此函数添加到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

简短答案

没有javascript可以满足的“通用”文档。每个具有javascript的浏览器实际上都是一种实现。但是,大多数现代浏览器都倾向于遵循一个标准,那就是EMCAScript标准。ECMAScript标准字符串至少需要采用ISO 8601定义的修改实现。

除此之外,浏览器也倾向于遵循IETF提出的第二个标准,这是RFC 2822中对时间戳的定义。实际文档可在底部的引用列表中找到。

由此您可以期待基本功能,但是“应该”本质上不是“是”。不过,我将在此过程中进行更深入的介绍,因为似乎只有三个人实际回答了这个问题(即斯科特,goofballLogic和peller),对我而言,这表明大多数人都不知道当您遇到什么实际情况创建一个Date对象。


长答案

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

要回答该问题,或者通常甚至寻找该问题的答案,您需要知道javascript不是一种新颖的语言。它实际上是ECMAScript的实现,并且遵循ECMAScript标准(但请注意,JavaScript实际上也早于这些标准; EMCAScript标准是在LiveScript / JavaScript的早期实现基础上构建的)。当前的ECMAScript标准为5.1(2011);在最初提出问题时('09年6月),标准是3(放弃了4),但在2009年底该职位发布后不久发布了5。javascript实现可能遵循的标准,可能无法反映实际的标准,因为a)这是给定标准的实现,b)并非所有标准的实现都是纯净的,

本质上,在处理javascript时,您要处理的是实现(JavaScript本身)的派生类(特定于浏览器的javascript)。以Google的V8为例,它实现了ECMAScript 5.0,但是Internet Explorer的JScript并未尝试遵循任何ECMAScript标准,而Internet Explorer 9却遵循了ECMAScript 5.0。

当将单个参数传递给新的Date()时,它将强制转换此函数原型:

new Date(value)

当两个或多个参数传递给新的Date()时,它将强制转换此函数原型:

new Date (year, month [, date [, hours [, minutes [, seconds [, ms ] ] ] ] ] )


这两个函数应该看起来很熟悉,但这并不能立即回答您的问题,量化为可接受的“日期格式”的内容需要进一步说明。
当您将字符串传递给new Date()时,它将调用原型(请注意,我宽松地使用了
原型一词;版本可能是单个函数,或者可能是单个函数中条件语句的一部分)您的字符串作为“ value”参数的参数的新Date(value)此函数将首先检查它是数字还是字符串。可以在以下位置找到此功能的文档:

http://www.ecma-international.org/ecma-262/5.1/#sec-15.9.3.2

由此,我们可以推断出要获得新的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函数。但是,请注意,“年”不是实际的年,仅是对“年”参数的引用。

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标准,如果不符合标准,则它将尝试根据旧格式来构建日期。基于评论的一些要点:

  1. 解析器未知的第一个数字之前的单词将被忽略。
  2. 带括号的文本将被忽略。
  3. 无符号数字后跟“:”将被解释为“时间成分”。
  4. 无符号数字后跟“。” 被解释为“时间成分”,并且必须以毫秒为单位。
  5. 带数字的数字后跟小时或小时分钟(例如+5:15或+0515)被解释为时区。
  6. 声明小时和分钟时,可以使用“ hh:mm”或“ hhmm”。
  7. 指示时区的单词被解释为时区。
  8. 所有其他数字均被解释为“日期成分”。
  9. 以一个月的前三个数字开头的所有单词都被解释为月份。
  10. 您可以使用以下两种格式之一来同时定义分钟和小时:“ hh:mm”或“ hhmm”。
  11. 处理完数字后,不允许使用“ +”,“-”和不匹配的“)”之类的符号。
  12. 匹配多种格式(例如1970-01-01)的项目将作为符合标准的EMCAScript 5.0 ISO 8601字符串进行处理。

因此,这足以让您基本了解将字符串传递到Date对象时的期望。您可以通过查看Mozilla在Mozilla开发人员网络上指向的以下规范(符合IETF RFC 2822时间戳)来进一步扩展此规范:

http://tools.ietf.org/html/rfc2822#page-14

Microsoft开发人员网络还提到了Date对象的另一个标准:ECMA-402,ECMAScript国际化API规范,它是ECMAScript 5.1标准(及以后的标准)的补充。可以在这里找到:

http://www.ecma-international.org/ecma-402/1.0/

无论如何,这应该有助于突出显示没有“文档”可以普遍表示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

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/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Date

http://msdn.microsoft.com/zh-CN/library/ff743760(v=vs.94).aspx

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

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

您可以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"));

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

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

我制作了一个非常简单的格式化程序,它是cut / 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())

http://snipplr.com/view/66968.82825/

无框架,有限但轻巧

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);
}

您可能会发现日期对象的这种修改有用,它比任何库都要小,并且可以轻松扩展以支持不同的格式:

注意:

  • 它使用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

只是为了继续恭敬待议的可靠答案-这可以处理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

我的结果得出结论,以下格式对我测试过的所有浏览器均有效(示例使用日期“ 2013年8月9日”):

[Full Year] / [Month] / [Date number] -月份可以是带或不带前导零的数字,也可以是短或长格式的月份名称,日期可以带或不带前导零。

  • 2013/08/09
  • 2013/08/9
  • 2013/8/09
  • 2013/8/9
  • 2013 /八月/ 09
  • 2013 /八月/ 9
  • 2013 /八月/ 09
  • 2013 /八月/ 9

[Month] / [Full Year] / [Date Number] -月可以是带或不带前导零的数字,也可以是短或长格式的月名称,日期可以带或不带前导零。

  • 08/2013/09
  • 08/2013/9
  • 8/2013/09
  • 8/2013/9
  • 八月/ 2013/09
  • 八月/ 2013/9
  • 2013年8月/ 09日
  • 2013年8月9日

[全年],[月份名称]和[日期编号]的任意组合,以空格分隔 -月份名称可以采用短格式或长格式,日期编号可以带有或不带有前导零。

  • 2013年8月9日
  • 2013年8月09
  • 2013年8月9日
  • 2013年8月9日
  • 2013年8月9日
  • 2013年8月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处理日期的一些强大功能。并且它有很好的记录

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"

所有浏览器

使用您使用的源格式格式化日期的最可靠方法是应用以下步骤:

  1. 使用new Date()创建Date对象
  2. 使用.getDate().getMonth().getFullYear()分别获得了日,月和年
  3. 根据目标格式将片段粘贴在一起

范例:

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的数据,“现代浏览器”是指Chrome 24 +,Firefox 29 +,IE11,Edge12 +,Opera 15+和Safari 每晚构建的版本

我写的另一种选择:

DP_DateExtensions库

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

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

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

如果你想只显示时间与2位,这可能会帮助你:

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/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Date

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");

答案是“无处”,因为日期格式是专有功能。我不认为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端口它轻巧(与Moment.js 2.15.0相比,最小化为1.35 KB与57.9 KB),并提供的大多数功能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

格式化日期以返回“ 2012-12-29”的正确方法是使用JavaScript Date Format中的脚本

var d1 = new Date();
return d1.format("dd-m-yy");

此代码不起作用:

var d1 = new Date();
d1.toString('yyyy-MM-dd');      

就我个人而言,因为我同时使用PHP和jQuery / javascript,所以我使用php.js中的date函数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,但是Kendo UI(全球化)Yahoo UI(实用程序)AngularJS等其他框架也有它们。

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

// Monday, November 06, 2000
kendo.toString(new Date(2000, 10, 6), "D")
本文地址:http://javascript.askforanswer.com/zainalikeyizhaodaoyouguanzaijavascriptzhonggeshihuariqidewendang.html
文章标签: ,  
版权声明:本文为原创文章,版权归 javascript 所有,欢迎分享本文,转载请保留出处!

文件下载

老薛主机终身7折优惠码boke112

上一篇:
下一篇:

评论已关闭!