如何使用NodeJS将UTC日期格式化为“YYYY-MM-DD hh:mm:ss”字符串?

问题描述 投票:186回答:15

使用NodeJS,我想将Date格式化为以下字符串格式:

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

我怎么做?

javascript node.js date
15个回答
419
投票

如果你正在使用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(总是一件好事)。


1
投票
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'

使用.toString(),这将变为格式

替换(/ T /,'')。 //将T替换为''2017-01-15T ...

替换(/..+/,'')// for ... 13:50:16.1271

例如,请参阅var new Date().toString("yyyyMMddHHmmss"). replace(/T/, ' '). replace(/\..+/, '') date

hour

0
投票

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

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

并使用它。见http://www.mattkruse.com/javascript/date/date.js

文档很清楚。


0
投票

我认为这实际上回答了你的问题。 在javascript中使用日期/时间非常烦人。经过一些白发后,我发现这实际上非常简单。

https://github.com/adgang/atom-time/blob/master/lib/dateformat.js

var date = new Date(); var year = date.getUTCFullYear(); var month = date.getUTCMonth(); var day = date.getUTCDate(); var hours = date.getUTCHours(); var min = date.getUTCMinutes(); var sec = date.getUTCSeconds(); var ampm = hours >= 12 ? 'pm' : 'am'; hours = ((hours + 11) % 12 + 1);//for 12 hour format var str = month + "/" + day + "/" + year + " " + hours + ":" + min + ":" + sec + " " + ampm; var now_utc = Date.UTC(str);



0
投票

我在Nodejs和angularjs使用appHelper.validateDates = function (start, end) { var returnval = false; var fd = new Date(start); var fdms = fd.getTime(); var ed = new Date(end); var edms = ed.getTime(); var cd = new Date(); var cdms = cd.getTime(); if (fdms >= edms) { returnval = false; console.log("step 1"); } else if (cdms >= edms) { returnval = false; console.log("step 2"); } else { returnval = true; console.log("step 3"); } console.log("vall", returnval) return returnval; } ,非常好

安装

dateformat

演示

$ npm install dateformat
$ dateformat --help

0
投票

替代#6233 ....

将UTC偏移量添加到本地时间,然后使用var dateFormat = require('dateformat'); var now = new Date(); // Basic usage dateFormat(now, "dddd, mmmm dS, yyyy, h:MM:ss TT"); // Saturday, June 9th, 2007, 5:46:21 PM // You can use one of several named masks dateFormat(now, "isoDateTime"); // 2007-06-09T17:46:21 // ...Or add your own dateFormat.masks.hammerTime = 'HH:MM! "Can\'t touch this!"'; dateFormat(now, "hammerTime"); // 17:46! Can't touch this! // You can also provide the date as a string dateFormat("Jun 9 2007", "fullDate"); // Saturday, June 9, 2007 ... 对象的toLocaleDateString()方法将其转换为所需格式:

Date

我正在创建一个默认为当地时间的日期对象。我正在为它添加UTC偏移量。我正在创建一个日期格式化对象。我以所需的格式显示UTC日期/时间:

// Using the current date/time let now_local = new Date(); let now_utc = new Date(); // Adding the UTC offset to create the UTC date/time now_utc.setMinutes(now_utc.getMinutes() + now_utc.getTimezoneOffset()) // Specify the format you want let date_format = {}; date_format.year = 'numeric'; date_format.month = 'numeric'; date_format.day = '2-digit'; date_format.hour = 'numeric'; date_format.minute = 'numeric'; date_format.second = 'numeric'; // Printing the date/time in UTC then local format console.log('Date in UTC: ', now_utc.toLocaleDateString('us-EN', date_format)); console.log('Date in LOC: ', now_local.toLocaleDateString('us-EN', date_format));


97
投票

更新2017-03-29:添加日期fns,关于Moment和Datejs的一些注释 更新2016-09-14:添加SugarJS,它似乎有一些出色的日期/时间功能。


好的,既然没有人真正提供过实际答案,这就是我的。

图书馆当然是以标准方式处理日期和时间的最佳选择。在日期/时间计算中有许多边缘情况,因此能够将开发移交给库是有用的。

以下是主节点兼容时间格式库的列表:

  • Moment.js [感谢Mustafa]“用于解析,操作和格式化日期的轻量级(4.3k)javascript日期库” - 包括国际化,计算和相对日期格式 - 更新2017-03-29:不再那么轻量级了但仍然是最全面的解决方案,特别是如果您需要时区支持。
  • date-fns [添加2017-03-29,感谢Fractalf]小巧,快速,适用于标准JS日期对象。如果您不需要时区支持,可以替代Moment。
  • qazxsw poi - 一个通用助手库,为JavaScript内置对象类型添加了许多必需的功能。包括一些优秀的日期/时间功能。
  • SugarJS - 它说的很好,很简单
  • strftime - 这是我之前在MomentJS之前使用的那个
  • dateutil
  • node-formatdate - “Time Traveler提供了一组实用方法来处理日期。从加法和减法到格式化。时间旅行者只扩展它创建的日期对象,而不会污染全局命名空间。”
  • TimeTraveller [感谢Dan D] - 更新:这也可以与Node一起使用并使用npm部署,请参阅文档

还有非节点库:

  • Tempus [感谢Peter Olson] - 没有打包在npm或GitHub中,所以不太容易使用Node - 不是真的推荐,因为自2007年以来没有更新!

54
投票

有一个转换库:

Datejs

然后写下你的要求:

npm install dateformat

然后绑定值:

var dateFormat = require('dateformat');

var day=dateFormat(new Date(), "yyyy-mm-dd h:MM:ss");


37
投票

我一般都不反对图书馆。在这种情况下,通用库似乎过度,除非应用程序的其他部分过程严重。

编写诸如此类的小实用功能对于初学者和有成就的程序员来说也是一种有用的练习,对于我们这些新手来说可以是一种学习体验。

dateformat

10
投票

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

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"  */

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


9
投票

javascript库sugar.js(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()) } )具有格式化日期的功能

例:

http://sugarjs.com/

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

4
投票

使用Date对象中提供的方法,如下所示:

new Date(2015,1,3,15,30).toLocaleString()

//=> 2015-02-03 15:30:00

它看起来很脏,但它应该可以正常使用JavaScript核心方法


1
投票

使用var ts_hms = new Date(); console.log( ts_hms.getFullYear() + '-' + ("0" + (ts_hms.getMonth() + 1)).slice(-2) + '-' + ("0" + (ts_hms.getDate())).slice(-2) + ' ' + ("0" + ts_hms.getHours()).slice(-2) + ':' + ("0" + ts_hms.getMinutes()).slice(-2) + ':' + ("0" + ts_hms.getSeconds()).slice(-2)); 模块,它是x-date的子模块之一;

x-class library

推荐问答