在nodejs

时间:2018-06-07 14:44:34

标签: javascript node.js momentjs

我想将'03/08/2017 01:00:01 '转换为node.js中的datetime对象,以便我可以获取日期中的特定日期和月份。例如:月份是08,上面的例子是03。

请参考下面的代码片段,它给出了我的结果。

const myDate = moment('03/08/2017  01:00:01 '.trim(),  ['DD/MM/YYYY  hh:mm:ss'], true).utcOffset(0).toDate();
console.log(myDate); //result 2017-08-02T19:30:01.000Z
console.log(myDate.getUTCFullYear()); //result 2017
console.log(myDate.getUTCMonth()); //result 7
console.log(myDate.getUTCDay()); //result 4

此外,我尝试了下面的代码片段。在这里,我无法使用.toDate()函数将其转换为datetime对象。

let date = moment.parseZone(myDate).format('YYYY-MM-DD hh:mm:ss');
console.log(date); // result 2017-08-03 01:00:01

这里它提供了正确的日期,但我无法从中提取月份。

let date_ = moment(new Date(date), 'DD/MM/YYYY HH:mm:ss').format('LLL');
console.log(date_); // result August 3, 2017 1:00 AM

下面的代码段也会给出第一个结果。我在一个文件中执行了所有这些行

let _date = moment(new Date(date)).utc().toDate();
console.log(_date);// result 2017-08-02T19:30:01.000Z
console.log(_date.getUTCFullYear()); //result 2017
console.log(_date.getUTCMonth()); //result 7
console.log(_date.getUTCDay()); //result 3

1 个答案:

答案 0 :(得分:2)

正如documentation所述:

  

默认情况下,时刻会以当地时间进行分析和显示。

     

如果您想以UTC格式解析或显示片刻,则可以使用   moment.utc()而不是moment()。

所以一种可能的方法是在UTC中工作并执行:

const myDate2 = moment.utc('03/08/2017  01:00:01',  ['DD/MM/YYYY  hh:mm:ss'], true).toDate();
console.log(myDate2.getUTCDate());
console.log(myDate2.getUTCMonth() + 1);
console.log(myDate2.getUTCHours());

请注意,要获取日期编号,必须拨打getUTCDategetUTCDay/getDay会返回星期几。此外,getMonth/getUTCMonth返回的月份数字在0-11范围内,因此必须将结果增加一个。

或者,可以在当地日期工作并执行:

const myDate1 = moment('03/08/2017  01:00:01',  ['DD/MM/YYYY  hh:mm:ss'], true).toDate();
console.log(myDate1.getDate());
console.log(myDate1.getMonth() + 1);
console.log(myDate1.getHours());