在 Angular 中创建新日期时删除时区信息

rst*_*rst 3 date typescript angular

以下问题,在尝试这行代码时

console.log(JSON.stringify(new Date('2016-06-15 10:59:53.5055')));
Run Code Online (Sandbox Code Playgroud)

我明白了"2016-06-15T08:59:53.505Z",但是我希望"2016-06-15T10:59:53.505Z"

如何从 中删除时区new Date

问题是,我通过 http-post 将此日期发送到 API。在 http.post 命令中,日期被字符串化(现在不正确)

jak*_*b.g 6

创建对象时无法删除时区信息Date——这是 API 的缺陷。

通过各种 API 创建的日期Date根据提供的时区(如果给定的方法支持)进行解析,或者如果缺少,它们会假定您本地计算机的时区;然后在内部它们表示为相对于 UTC 时区的日期。

每当您对日期进行字符串化时,您都会隐式调用date.toJSON()which 依次调用date.toISOString(),后者将字符串化为 UTC 相对时间(因此Z作为代表 UTC 的结尾Zulu)。

据我所知,除了使用本地时区之外,没有任何方法可以序列化为类似 ISO 的字符串。您可以使用低级 Date 属性来编写自己的方法,如果确实需要,该方法会序列化回本地时区,或者您可以使用像date-fns. 您可以使用moment库,但虽然非常强大,但它很大,所以要小心。


小智 5

是的,您可能需要计算时区偏移量并添加然后添加到您的日期对象时间示例代码如下。

var d = new Date('2016-06-15 10:59:53.5055');
    var timeZoneDifference = (d.getTimezoneOffset() / 60) * -1; //convert to positive value.
    d.setTime(d.getTime() + (timeZoneDifference * 60) * 60 * 1000);
    d.toISOString()
Run Code Online (Sandbox Code Playgroud)