JavaScript“新日期”创建的日期与原始日期字符串不同的时间

时间:2018-10-23 21:18:25

标签: javascript datetime

我将日期作为字符串'2018-10-15 00:00:00.000',然后使用new Date('2018-10-15 00:00:00.000')将其转换为日期。

我将这个日期保存到数据库(使用API​​)中,并将数据另存为2018-10-15 **04**:00:00.000。注意凌晨4点。该API获取日期时间为4:00 am。

enter image description here

在我的角度应用程序中,保存该日期的对象定义为Date类型。

meeting_date: Date;

这是从控制台。

dt = new Date('2018-10-15 00:00:00.000')
Mon Oct 15 2018 00:00:00 GMT-0400 (Eastern Daylight Time)

JSON.stringify(dt)
""2018-10-15T04:00:00.000Z""

我想将日期另存为2018-10-15 00:00:00.000。我究竟做错了什么?

1 个答案:

答案 0 :(得分:2)

如果您获取的日期输入字符串代表UTC,那么您可能要在UTC中创建Date对象(您当前的方法是在客户端计算机的本地时间创建Date对象,这就是为什么EDT偏移会影响您存储在数据库中的日期时间的原因)。另外,您应该注意Date()not recommended for parsing date strings due to browser inconsistencies

以下是使用一些简单的正则表达式解析字符串并在UTC中创建Date对象的示例:

const inputDate = '2018-10-15 00:00:00.000';
let [y, m, d, hh, mm, ss, ms] = inputDate.match(/\d+/g);
let date = new Date(Date.UTC(y, m - 1, d, hh, mm, ss, ms));

console.log(JSON.stringify(date));

// date as UTC string
console.log(date.toUTCString());

// date as local string
console.log(date.toString());