首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Javascript,没有时区的Date.parse

Javascript,没有时区的Date.parse
EN

Stack Overflow用户
提问于 2014-07-01 16:37:36
回答 2查看 2.9K关注 0票数 4

我对Javascript的日期有问题。

我收到一个包含日期的JSON,当我试图获取date对象时,它返回不同时区中的值,通常将日期移到20小时前的一天。

示例:

在json中的值是:"2014-06-01T00:00:00"

当我这么做

代码语言:javascript
运行
复制
var d2 = new Date(Date.parse("2014-06-01T00:00:00"))

它回来了

2014年5月31日星期六20:00格林尼治时间-0400(东部夏令时间)

当我期待

孙俊01 2014 00:00格林尼治时间-0400

我怎样才能解决这个问题?

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-07-01 16:46:30

Date.parse返回自UTC中的时代以来的毫秒数,因此不管您传入的日期/时间字符串是什么,您都会得到UTC。(有关更多信息,请参见Objects/Date/parse。)

如果您想将其转换为本地时间,则必须知道您的偏移量是否来自UTC。你可以从JavaScript那里得到这样的信息:

代码语言:javascript
运行
复制
var offset = new Date().getTimezoneOffset()*60*1000;

(Date.prototype.getTimezoneOffset以分钟为单位返回偏移量,因此我们必须转换为毫秒。)

然后,您可以使用该偏移量构造您的日期:

代码语言:javascript
运行
复制
var date = new Date(Date.parse("2014-06-01T00:00:00") + offset);

如果要将该日期解释为处于不同的时区,则只需使用适用于该时区的毫秒偏移量。不过,记住日光节约:这肯定会使事情复杂化。

票数 3
EN

Stack Overflow用户

发布于 2014-07-01 16:42:36

来自Date.parse的Mozilla文档

ECMAScript 5 ISO-8601格式支持 或者,日期/时间字符串可以是ISO 8601格式。例如,可以传递和解析"2011-10-10“(刚好日期)或"2011-10-10T14:48:00”(日期和时间)。UTC时区用于解释不包含时区信息的ISO 8601格式的参数。

您的值不包括时区信息,因此假定它位于UTC。午夜协调世界时,这一天的问题是晚上8点在您的当地时区。请注意,Date对象本身没有时区的概念--它只是自Unix时代以来的几毫秒时间。使用toString将其转换为字符串时,该字符串将使用浏览器的本地时区。您可以使用toUTCString来使用UTC转换为文本表示(因此,在本例中,您将以从UTC开始的午夜时结束)。

就你能做些什么来“解决”这个问题..。首先,你需要理解你想要表达的价值,以及你想用它做什么。如果没有更多的信息我们是帮不了你的。

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

https://stackoverflow.com/questions/24515347

复制
相关文章

相似问题

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