我有一个字符串"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.如何正确地转换这个?
发布于 2017-01-13 20:51:46
如何正确地转换这个?
与ECMAScript ed 5 (ES5)相一致的实现将使用日期构造函数或Date.parse正确地解析字符串,因此:
var strDateTime = "2017-01-05T15:03:25.21";
var myDate = new Date(strDateTime);将于2017年1月5日下午3:03:25.21在当地时区制作日期。
但是,考虑到实现之间解析的一般不一致性,不建议这样做。应该使用自定义函数或库,例如使用fecha.js
var myDate = fecha.parse(strDateTime, "YYYY-MM-DDTHH:mm:ss.SS")从ES5和更高版本,ISO8601日期和时间字符串大多按照ISO8601中的指定进行解析。主要的区别是:
因此:
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、getMonth、getDate、getHours等)返回的本地值。
偏移量为+0800的系统上的字符串"2017-01-05T15:03:25.21“将产生一个时间值为1483599805210,表示2017-01-05T07:03:25.21Z (即UTC+0000)。
如果您希望向不同时区的客户发送一个表示特定时刻的时间戳,那么下面的一个应该是套件。
将时区追加到字符串:
2017-01-05T15:03:25.21+0800使用协调世界时的等效值:
2017-01-05T07:03:25.21Z使用时间值:
1483599805210最后一个通常是首选的,因为所有实现都支持new Date(timevalue),它是明确的,并且可以很容易地转换为在其他系统中使用。
发布于 2017-01-05 07:20:50
可以将时区添加到字符串的末尾,如下所示:
var strDateTime = "2017-01-05T15:03:25.21"+"-08:00";
var myDate = new Date(strDateTime);您可以在这里阅读有关有效日期格式的更多信息:
发布于 2017-01-05 09:20:45
这应该能行
var strDateTime = "2017-01-05T15:03:25.21";
var myDate = new Date(strDateTime.replace('T', ' '));我的时区输出:清华(2017年1月5日) 15:03:25 GMT+0200 (EET)
https://stackoverflow.com/questions/41479222
复制相似问题