JavaScript 解析日期

标签 javascript date

我正在编写一个 MVC 5 Web 应用程序。为此,我有多个列表,通过 javascript 和 jquery 传播和管理(一个数据集、依赖选择控件以及添加 ajax 回调会使事情变得不必要的复杂化。)

我遇到的问题是:我有一个隐藏的字段,格式为 ISO 8601。当我以用户本地时间显示日期时遇到问题,我得到了偏移的日期。

因此,如果日期表述为:01-01-2009(ISO 8601 格式为:2009-01-01),用户将看到:12-31-2008。

当我解析我正在使用的日期时:

this.date = new Date(Date.parse(originalString));
/* ^- Date.parse is giving me a number. */

显示我正在使用的日期文本:

admin.date.toLocaleDateString().Concat(...

我需要进行任何类型的修补才能将内容调整到正确的时区吗?使用 console.log(admin.date); 时的日期显示原文2009-01-01

我认为 toLocaleDateString 中有一些我没有正确指定的参数,但我对它的熟悉程度很低。

编辑:目标是防止日期偏移。我们只存储日期,时间部分被删除。我们有多个时区发布到此数据库,目标是:我们使用发布者的日期,时间下降。如果日期是 2015 年 5 月 1 日,我希望看到该日期的任何人都看到 2015 年 5 月 1 日,“toLocaleDateString”只是使其在其所在地区显示格式正确的一种方法。因此,将日期视为 yyyy-mm-dd 的人会正确地看到它。

最佳答案

基于 Date.parse 的文档:

The Date.parse() method parses a string representation of a date, and returns the number of milliseconds since January 1, 1970, 00:00:00 UTC.

您正在为解析的日期字符串返回 UTC 纪元时间,因此该日期对于本地时间来说是关闭的。因此,您需要知道本地时间和 UTC 之间的时差 Date.getTimezoneOffset提供(以分钟为单位)以便设置本地时间的正确日期:

> var date = new Date(Date.parse('2009-01-01'));
undefined
> date;
Wed Dec 31 2008 19:00:00 GMT-0500 (EST)
> date.getTimezoneOffset();
300
> date.setMinutes(date.getTimezoneOffset());
1230786000000
> date;
Thu Jan 01 2009 00:00:00 GMT-0500 (EST)

需要注意的一点是:

...the offset is positive if the local timezone is behind UTC and negative if it is ahead.

因此,如果这适用于您的应用程序,您可能需要注意值为负数的区域设置。如果是这样,也许只需省略负值就足够了,因为如果区域设置的时区早于 UTC 午夜,则日期应该相同。

编辑:为了弥补夏令时可能出现的问题:

> var dateVals = String.prototype.split.call('2009-01-01', '-');
undefined
> var date = new Date(dateVals[0], dateVals[1] - 1, dateVals[2]);
undefined
> date
Thu Jan 01 2009 00:00:00 GMT-0500 (EST)

关于JavaScript 解析日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30717706/

相关文章:

javascript - 文本输入限制在 31(天)以内

javascript - 来自离散字符串域的连续色标?

javascript - 为什么 Date#getHours() 返回小时 + 1?

JavaScript:将日/周转换为年

r - 按时间间隔创建每月平均值

javascript - NaN 进行 6 次计算

javascript - 使用 Ajax 将 CORS header 添加到 http 请求

javascript - Three.js 代码中的对象始终呈现在另一个对象之上

java - 为什么 java.time 使用 'of' 而不是 'new' 来表示日期?

Pandas Lambda 函数格式月和日