首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Javascript如何将非UTC日期字符串转换为Date对象?

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

Stack Overflow用户
提问于 2017-01-05 07:15:41
回答 3查看 2.8K关注 0票数 5

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

代码语言:javascript
复制
var strDateTime = "2017-01-05T15:03:25.21";
var myDate = new Date(strDateTime);

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

如何正确地转换这个?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-01-13 20:51:46

如何正确地转换这个?

与ECMAScript ed 5 (ES5)相一致的实现将使用日期构造函数或Date.parse正确地解析字符串,因此:

代码语言:javascript
复制
var strDateTime = "2017-01-05T15:03:25.21";
var myDate = new Date(strDateTime);

将于2017年1月5日下午3:03:25.21在当地时区制作日期。

但是,考虑到实现之间解析的一般不一致性,不建议这样做。应该使用自定义函数或库,例如使用fecha.js

代码语言:javascript
复制
var myDate = fecha.parse(strDateTime, "YYYY-MM-DDTHH:mm:ss.SS")

从ES5和更高版本,ISO8601日期和时间字符串大多按照ISO8601中的指定进行解析。主要的区别是:

  1. 只有日期的表格,如"2016-12-12“被解析为世界协调时,而不是本地的。
  2. 只支持“简化ISO 8601扩展格式”,详见http://ecma-international.org/ecma-262/7.0/index.html#sec-date-time-string-format

因此:

代码语言:javascript
复制
var s = "2017-01-05T15:03:25.21";
var d = new Date(s)

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

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

代码语言:javascript
复制
//myDate will have another redundant time-zone offset.

是不正确的。主机时区设置将用于确定用于计算UTC时间值的偏移量,以及计算get*方法(如getFullYear、getMonth、getDate、getHours等)返回的本地值。

偏移量为+0800的系统上的字符串"2017-01-05T15:03:25.21“将产生一个时间值为1483599805210,表示2017-01-05T07:03:25.21Z (即UTC+0000)。

如果您希望向不同时区的客户发送一个表示特定时刻的时间戳,那么下面的一个应该是套件。

将时区追加到字符串:

代码语言:javascript
复制
2017-01-05T15:03:25.21+0800

使用协调世界时的等效值:

代码语言:javascript
复制
2017-01-05T07:03:25.21Z

使用时间值:

代码语言:javascript
复制
1483599805210

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

票数 2
EN

Stack Overflow用户

发布于 2017-01-05 07:20:50

可以将时区添加到字符串的末尾,如下所示:

代码语言:javascript
复制
var strDateTime = "2017-01-05T15:03:25.21"+"-08:00";
var myDate = new Date(strDateTime);

您可以在这里阅读有关有效日期格式的更多信息:

对象/日期/解析

https://www.w3.org/TR/NOTE-datetime

票数 2
EN

Stack Overflow用户

发布于 2017-01-05 09:20:45

这应该能行

代码语言:javascript
复制
var strDateTime = "2017-01-05T15:03:25.21";
var myDate = new Date(strDateTime.replace('T', ' '));

我的时区输出:清华(2017年1月5日) 15:03:25 GMT+0200 (EET)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41479222

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档