我想将'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
答案 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());
请注意,要获取日期编号,必须拨打getUTCDate
,getUTCDay/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());