【问题标题】:JavaScript Date constructor one day behind but not accounting for time zone?JavaScript Date 构造函数落后一天但不考虑时区?
【发布时间】:2014-01-16 07:17:24
【问题描述】:

This SO post 解释了为什么 JavaScript Date 构造函数可以休息一天,但我们看到的输出并未考虑时区更改,即它显示的是我们的时区 (PST) 的午夜。

有什么线索吗?最终,我们要获取用户本地时区的日期(没有时间),添加 X 天,将这个新日期写入localStorage,然后获取新日期。目前,由于以下问题,我们从 localStorage 获取的内容滞后了一天。

var test = new Date( "Sun Dec 29 2013" )
Sat Dec 28 2013 00:00:00 GMT-0800 (Pacific Standard Time)

以下是基于 cmets 的更多细节:

var date = new Date(); 
var dateAsString = date.toDateString();
console.log(new Date(dateAsString)); 

【问题讨论】:

  • 如果希望它是一个一致的时区,为什么不在构造日期对象的时候加上时区呢?在Sun Dec 29 2013 之后添加GMT 将使日期保持一致,而与用户时区无关。关于正在发生的事情,Javascript 将在客户端机器上解释它,因此在没有时区的情况下,它将假定用户。
  • 好的 什么 版本的 JavaScript 你正在使用?我在您所指的那个时区,当我以这种方式声明变量时,我的回复显示Sun Dec 29 2013 00:00:00 GMT-0800 (PST)。为什么不能只使用 ISO 8601?有什么原因吗?
  • @RayToal 我们从 Chrome 开发者工具的控制台运行这些命令。我们如何检查 JS 版本?我们如何执行 ISO 8601?它可以在 PhoneGap 应用中运行吗?
  • @Robert,我们需要用户的时区,因为我们会在午夜(他们的时间)之后检查。
  • 然后使用.getTimezoneOffset() 看看在祖鲁午夜之后您需要等待多长时间。 developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…

标签: javascript date


【解决方案1】:

使用用户的时区偏移加上时间字符串来创建符合Date Time string format 的日期。例如:

var foo = new Date().getTimezoneOffset() / 60;
var bar = new Date().toISOString();
var baz = new Date(bar.replace("Z","+0" + foo + ":00") );

适用于具有正的单个数字偏移量的时区。

【讨论】:

  • 但这会构造一个字符串,表示与new Date() 不同的日期?
  • @bergi 这不是问题吗,new Date() 错了?
  • 如果new Date() 出错了,您需要修复系统时钟,而不是玩弄任何时区。
猜你喜欢
  • 2019-08-28
  • 2019-04-03
  • 2023-03-29
  • 2014-09-24
  • 1970-01-01
  • 2010-12-03
  • 2020-09-12
  • 1970-01-01
  • 2016-10-22
相关资源
最近更新 更多