gpt4 book ai didi

Javascript 如何将非 UTC 日期字符串转换为日期对象?

转载 作者:搜寻专家 更新时间:2023-11-01 04:13:44 28 4
gpt4 key购买 nike

我有一个字符串“2017-01-05T15:03:25.21”,它已经是我所在时区的准确时间。 (例如:+8)如何将此字符串转换为日期对象?提出这个问题的原因是,日期类似乎只接受“UTC 日期字符串”。如果我直接这样做:

var strDateTime = "2017-01-05T15:03:25.21";
var myDate = new Date(strDateTime);

//myDate will have another redundant time-zone offset.

如何正确转换?

最佳答案

How to convert this properly?

与 ECMAScript ed 5 (ES5) 及更高版本一致的实现将使用 Date 构造函数或 Date.parse 正确解析字符串,因此:

var strDateTime = "2017-01-05T15:03:25.21";
var myDate = new Date(strDateTime);

将在本地时区生成 5 Jan 2017 3:03:25.21 PM 的日期。

但是,鉴于实现之间解析的普遍不一致,不建议这样做。应使用自定义函数或库,例如使用 fecha.js :

var myDate = fecha.parse(strDateTime, "YYYY-MM-DDTHH:mm:ss.SS")

从 ES5 及更高版本开始,ISO 8601 日期和时间字符串主要按照 ISO 8601 中的规定进行解析。主要区别是:

  1. 仅日期形式如“2016-12-12”被解析为 UTC 而不是本地
  2. 仅支持“ISO 8601 扩展格式的简化”,详见 ECMA-262 §20.3.1.6 Date Time String Format

因此给定:

var s = "2017-01-05T15:03:25.21";
var d = new Date(s)

然后 d 将根据主机系统时区设置转换为具有 UTC 时间值的日期。如果您的主机设置为 UTC+0800,那么这就是应用的时区。

日期对象没有时区。他们只有一个时间值,表示自 1970-01-01T00:00:00Z 以来的毫秒数。任何相关的时区信息都来自主机。所以评论:

//myDate will have another redundant time-zone offset.

不正确。主机时区设置将用于确定用于计算 UTC 时间值的偏移量,还用于计算 get* 方法(如 getFullYear、getMonthgetDategetHours

字符串“2017-01-05T15:03:25.21”在偏移量为+0800的系统上将生成时间值1483599805210,代表2017-01-05T07:03:25.21Z(即UTC+0000 ).

如果您希望向不同时区的客户发送代表特定时刻的时间戳,则应采用以下方法之一。

将时区附加到字符串:

2017-01-05T15:03:25.21+0800

使用等效的 UTC:

2017-01-05T07:03:25.21Z

使用时间值:

1483599805210

最后一个通常是首选,因为所有实现都支持 new Date(timevalue),它是明确的并且可以轻松转换以用于其他系统。

关于Javascript 如何将非 UTC 日期字符串转换为日期对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41479222/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com