var dt_now = '2-22-2013';//mm-dd-yyyy, this is dynamic in actual code
dt_now = dt_now.split("-");
dt_now = addZero(dt_now[2])+'-'+addZero(dt_now[0])+'-'+addZero(dt_now[1]);
dt_now = new Date(dt_now);
我使用上面的代码将用户定义的文本转换为实际日期,以便在我的代码的其余部分中使用。它似乎对我来说工作正常,但在位于不同时区的另一个系统(我的时间 -12 小时)上,日期显示为 2 月 21 日
而不是 2 月 22 日
,也就是说,它比预期日期晚一天运行。我不知道如何解决这个问题或者错误可能是什么。有什么建议吗?
最佳答案
为避免时区问题,请使用 UTC。您不必依赖图书馆;简单的 ISO 8601 日期字符串就足够了。请参阅Date.prototype.toISOString
用于根据日期制作一个(compatibility)。
构造就像 new Date('yyyy-mm-ddT00:00Z')
一样简单,因此您只需对代码稍作更改即可创建一个日期
var dt_now = '2-22-2013';//mm-dd-yyyy, this is dynamic in actual code
dt_now = dt_now.split("-");
dt_now = addZero(dt_now[2])+'-'+addZero(dt_now[0])+'-'+addZero(dt_now[1])+'T00:00Z';
dt_now = new Date(dt_now);
Z
表示 UTC。我添加了一个时间 (T00:00
),以便它与 toISOString
生成的时间匹配。
关于javascript 日期因时区而异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14956272/