zer*_*law 5 javascript datetime date
我有一个字符串“ 2017-01-05T15:03:25.21”,它已经是我所在时区的确切时间。(例如:+8)如何将此字符串转换为Date对象?提出此问题的原因是,Date类似乎仅接受“ UTC日期字符串”。如果我直接这样做:
var strDateTime = "2017-01-05T15:03:25.21";
var myDate = new Date(strDateTime);
//myDate will have another redundant time-zone offset.
Run Code Online (Sandbox Code Playgroud)
如何正确转换呢?
\n\n\n如何正确转换这个?
\n
与 ECMAScript ed 5 (ES5) 及更高版本一致的实现将使用 Date 构造函数或 Date.parse 正确解析字符串,因此:
\n\nvar strDateTime = "2017-01-05T15:03:25.21";\nvar myDate = new Date(strDateTime);\nRun Code Online (Sandbox Code Playgroud)\n\n将生成本地时区 2017 年 1 月 5 日下午 3:03:25.21 的日期。
\n\n但是,考虑到实现之间解析的普遍不一致,不建议这样做。应该使用自定义函数或库,例如使用fecha.js:
\n\nvar myDate = fecha.parse(strDateTime, "YYYY-MM-DDTHH:mm:ss.SS")\nRun Code Online (Sandbox Code Playgroud)\n\n从 ES5 及更高版本开始,ISO 8601 日期和时间字符串主要按照 ISO 8601 中的指定进行解析。主要区别是:
\n\n所以给出:
\n\nvar s = "2017-01-05T15:03:25.21";\nvar d = new Date(s)\nRun Code Online (Sandbox Code Playgroud)\n\n然后d将根据主机系统时区设置转换为具有 UTC 时间值的日期。如果您的主机设置为 UTC+0800,则这就是应用的时区。
\n\n日期对象没有时区。它们所拥有的只是一个时间值,表示自 1970-01-01T00:00:00Z 以来的毫秒数。任何相关时区信息均来自主机。所以评论:
\n\n//myDate will have another redundant time-zone offset.\nRun Code Online (Sandbox Code Playgroud)\n\n是不正确的。主机时区设置将用于确定用于计算 UTC 时间值的偏移量,并用于计算get*方法(如getFullYear、getMonth、getDate、getHours等)返回的本地值。
\n\n偏移量为+0800的系统上的字符串“2017-01-05T15:03:25.21”将生成时间值1483599805210,它代表2017-01-05T07:03:25.21Z(即UTC+0000)。
\n\n如果您希望向不同时区的客户端发送代表特定时刻的时间戳,则应使用以下选项之一。
\n\n将时区附加到字符串:
\n\n2017-01-05T15:03:25.21+0800\nRun Code Online (Sandbox Code Playgroud)\n\n使用 UTC 等效值:
\n\n2017-01-05T07:03:25.21Z\nRun Code Online (Sandbox Code Playgroud)\n\n使用时间值:
\n\n1483599805210\nRun Code Online (Sandbox Code Playgroud)\n\n最后一个通常是首选,因为new Date(timevalue)所有实现都支持它,它是明确的并且可以轻松转换以在其他系统中使用。
| 归档时间: |
|
| 查看次数: |
1608 次 |
| 最近记录: |