没有时区的Javascript日期对象

Lau*_*ant 6 html javascript datetime date cordova

我最近为基于云的系统实现了一个基于 webview 的移动应用程序,但我遇到了一个令人沮丧的问题。

我们按以下格式将日期存储在数据库中:

2016-10-11T11:09:00
Run Code Online (Sandbox Code Playgroud)

在桌面应用程序中,它正确显示为2016/10/11 11:09:00

但是,在移动应用程序中(我们使用 phonegap,因此它是基于 HTML + JS 的),当我通过 PHP 调用从数据库中获取此日期字符串时,我使用 'new Date("2016-10-11T11: 09:00")',它显示时区转换,例如,如果我在 GMT + 2,它将是2016/10/11 13:09:00

我怎样才能防止这种情况?

每当我在视图上显示日期时,我都会使用 date.toString("yyyy/MM/dd HH:mm:ss") 格式。

此外,在跨多个平台存储和显示日期时间方面,我愿意接受任何建议。我发现这个yyyy-mm-ddThh:mm:ss格式非常好并且被广泛使用,直到我遇到了这个 javascript 问题。

(据您所知,我不是 javascript 或 HTML 专家)

LE:我不想将日期转换为 UTC 字符串,我希望实际的 Date 对象与数据库值一致,因为我通过 AngularJS 将它连接到 HTML 日期时间选择器。

mik*_*iko 4

你真正想要实现的目标是什么?如果您希望始终显示时间戳,因为它们忽略时区信息,那么当这些时间戳可能向某些用户显示未来时间时,您可能会让用户感到非常困惑。例如:某人修改了数据,而美国西海岸的另一个用户查看了数据并看到了指向未来的时间戳。

也许您想要使用的是 Data.toUTCString(),它显示时间戳,以便您将 GMT 作为时区。然后,用户就会清楚地知道该时间戳不在他们的时区中。此外,您可能希望将时区信息附加到时间戳字符串,以便正确进行转换。如果您的时间戳采用 UTC(或祖鲁时间),您可以在字符串末尾添加“Z”。RFC 2822 第 3.3 节定义日期和时间应该表示本地时间,但至少在 Node.js 中,如果您忽略时区信息,它似乎表示 UTC 时间。因此,添加时区信息将使您的生活更轻松(如果您在存储在数据库中的字符串中添加时区信息会更好)。

举个例子:

var timestamp = "2016-10-11T11:09:00";
var d = new Date(timestamp);
// or
d = new Date(timestamp + "Z");

// Then showing the date
d.toString();
// or without the converting it to user's local timezone
d.toUTCString();
Run Code Online (Sandbox Code Playgroud)

我希望这有帮助。

  • 感谢您的建议,但我想要实现的是 Date 对象将被剥离时区偏移量。这个 toUTCString() 函数仅在我想将其转换为字符串时才有帮助。我需要日期对象与数据库中的值一致,因为我在 HTML 时间输入中显示它。 (4认同)