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 date
和hour
:
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
文件很清楚。