Node.js – 如何以UTC格式化datestring

使用Node.js,我想将Date格式化为以下string格式:

 var ts_hms = new Date(UTC); ts_hms.format("%Y-%m-%d %H:%M:%S"); 

我怎么做?

如果你使用的是Node.js,你肯定会有EcmaScript 5,所以Date有一个toISOString方法。 您正在要求对ISO8601进行一些修改:

 new Date().toISOString() > '2012-11-04T14:51:06.157Z' 

所以只需要删除一些东西,然后设置:

 new Date().toISOString(). replace(/T/, ' '). // replace T with a space replace(/\..+/, '') // delete the dot and everything after > '2012-11-04 14:55:45' 

或者,在一行中: new Date().toISOString().replace(/T/, ' ').replace(/\..+/, '')

ISO8601必然是UTC(也是由第一个结果的尾部Z表示),所以你默认得到UTC(总是一件好事)。

更新2017-03-29:添加date-Fns,关于Moment和Datejs的一些注释
更新2016-09-14:增加了SugarJS似乎有一些优秀的date/时间function。


好的,因为没有人提供实际的答案,这是我的。

图书馆无疑是以标准方式处理date和时间的最佳select。 在date/时间计算中有很多边缘情况,所以能够将开发交给图书馆是有用的。

以下是主要的Node兼容时间格式化库列表:

  • Moment.js [ 感谢Mustafa ]“一个轻量级的(4.3k)JavaScriptdate库,用于parsing,操作和格式化date” – 包括国际化,计算和相对date格式 – 更新2017-03-29 :不太轻量级更多,但仍然是最全面的解决scheme,特别是如果您需要时区支持。
  • date-fns [已添加2017-03-29,感谢Fractalf ]小巧,快速,适用于标准JSdate对象。 如果您不需要时区支持,那么可以selectMoment。
  • SugarJS – 一个通用的帮助程序库,为JavaScript内置的对象types添加了非常需要的function。 包括一些优秀的date/时间function。
  • strftime – 它说的很好,很简单
  • dateutil – 这是我在MomentJS之前使用的
  • 节点formatdate
  • TimeTraveller – “Time Traveler提供了一组处理date的实用方法,从加减法到格式化,Time Traveler只扩展它创build的date对象,而不会污染全局命名空间。
  • Tempus [感谢Dan D] – 更新:这也可以与Node一起使用,并与npm部署,请参阅文档

还有非节点库:

  • Datejs [感谢Peter Olson] – 没有包装在npm或者GitHub中,所以不太容易和Node一起使用 – 从2007年开始并没有真正推荐过。

有一个转换的库:

 npm install dateformat 

然后写下你的要求:

 var dateFormat = require('dateformat'); 

然后绑定值:

 var day=dateFormat(result.request_date, "yyyy-mm-dd h:MM:ss"); 

看dateformat

一般来说我对图书馆没有任何反应。 在这种情况下,除非应用程序的其他部分的date很长,否则通用库似乎是过度的。

编写这样的小型实用程序function对初学者和成熟的程序员来说也是一个有用的练习,对于我们中的新手来说可以是一次学习体验。

 function dateFormat (date, fstr, utc) { utc = utc ? 'getUTC' : 'get'; return fstr.replace (/%[YmdHMS]/g, function (m) { switch (m) { case '%Y': return date[utc + 'FullYear'] (); // no leading zeros required case '%m': m = 1 + date[utc + 'Month'] (); break; case '%d': m = date[utc + 'Date'] (); break; case '%H': m = date[utc + 'Hours'] (); break; case '%M': m = date[utc + 'Minutes'] (); break; case '%S': m = date[utc + 'Seconds'] (); break; default: return m.slice (1); // unknown code, remove % } // add leading zero if required return ('0' + m).slice (-2); }); } /* dateFormat (new Date (), "%Y-%m-%d %H:%M:%S", true) returns "2012-05-18 05:37:21" */ 

JavaScript库sugar.js( http://sugarjs.com/ )具有格式化date的function

例:

 Date.create().format('{dd}/{MM}/{yyyy} {hh}:{mm}:{ss}.{fff}') 

您可以使用可用于格式化date的许多模块之一。 @ Julian-Knight在他的回答中给出了一个很好的清单。

此外,另一个很好的方法来实现你正在寻找的是使用Date对象提供的方法如下:

 var ts_hms = new Date(UTC); console.log( ts_hms.getFullYear() + '-' + ("0" + (ts_hms.getMonth() + 1)).slice(-2) + '-' + ("0" + (ts_hms.getDate() + 1)).slice(-2) + ' ' + ("0" + ts_hms.getHours()).slice(-2) + ':' + ("0" + ts_hms.getMinutes()).slice(-2) + ':' + ("0" + ts_hms.getSeconds()).slice(-2)); 

它看起来很肮脏,但它应该与JavaScript核心方法正常工作:)

 new Date(2015,1,3,15,30).toLocaleString() //=> 2015-02-03 15:30:00 

易于阅读和自定义的方式来获得所需格式的时间戳,无需使用任何库:

 function timestamp(){ function pad(n) {return n<10 ? "0"+n : n} d=new Date() dash="-" colon=":" return d.getFullYear()+dash+ pad(d.getMonth()+1)+dash+ pad(d.getDate())+" "+ pad(d.getHours())+colon+ pad(d.getMinutes())+colon+ pad(d.getSeconds()) } 

(如果您需要UTC格式的时间,那么只需更改函数调用,例如“getMonth”变成“getUTCMonth”)

 new Date().toString("yyyyMMddHHmmss"). replace(/T/, ' '). replace(/\..+/, '') 

与.toString(),这成为格式

replace(/ T /,'')。 //将Treplace为“2017-01-15T …

replace(/..+/,'')// … 13:50:16.1271

例如,请参阅var datehour

 var date="2017-01-15T13:50:16.1271".toString("yyyyMMddHHmmss"). replace(/T/, ' '). replace(/\..+/, ''); var auxCopia=date.split(" "); date=auxCopia[0]; var hour=auxCopia[1]; console.log(date); console.log(hour); 

使用x-date -class模块,它是x-class库的子模块之一;

 require('x-date') ; //--- new Date().format('yyyy-mm-dd HH:MM:ss') //'2016-07-17 18:12:37' new Date().format('ddd , yyyy-mm-dd HH:MM:ss') // 'Sun , 2016-07-17 18:12:51' new Date().format('dddd , yyyy-mm-dd HH:MM:ss') //'Sunday , 2016-07-17 18:12:58' new Date().format('dddd ddSS of mmm , yy') // 'Sunday 17thth +0300f Jul , 16' new Date().format('dddd ddS mmm , yy') //'Sunday 17th Jul , 16' 

我需要一个简单的格式化库,没有语言环境和语言的支持。 所以我修改了

http://www.mattkruse.com/javascript/date/date.js

并用它。 请参阅adgang/atom-time/blob/master/lib/dateformat.html

文件很清楚。