gpt4 book ai didi

javascript - json 日期和时区

转载 作者:行者123 更新时间:2023-11-30 13:30:36 27 4
gpt4 key购买 nike

我有以下代码:

$(function () {

var thedate = "/Date(1198908717056)/";
var thedate2 = ProcessDate(thedate)
alert(thedate2);

});

function ProcessDate(DateString) {

var TheDate = eval(DateString.replace(/\/Date\((\d+)\)\//gi, "new Date($1)"));
return TheDate;
}

当它运行时,它会返回 12 月 29 日的警报,并且时间显示为东部时间。 当我更改计算机上的时区时,它仍然显示东部时区的日期。

我的问题是:字符串“/Date(1198908717056)/”是否包含时区信息,或者警报中显示的时区是浏览器确定我的时区的结果?

谢谢。

最佳答案

JSON doesn't have dates 完全(这是 JSON 的缺陷之一)。那些字符串只是字符串。

一些框架,如 ASP.Net,使用该语法来指示日期。他们所在的时区将由框架决定。我相信日期是 UTC,所以你可以使用 new Date(Number)构造函数来创建它们(更多信息在 this other answer 中)。这通过直接设置其内部“自 The Epoch UTC 以来的毫秒数”值来创建日期,更多信息在 section 15.9 中。的规范。请注意,事实上,只有在创建这些伪日期字符串时使用的是 UTC 时,这才有效。


更新:查看您的代码,虽然它有效,但这一行:

var TheDate = eval(DateString.replace(/\/Date\((\d+)\)\//gi, "new Date($1)"));

...是对 eval 的滥用。 eval 应尽可能避免。相反,如果您想将其保留为单行:

var TheDate = new Date(Number(DateString.replace(/\/Date\((\d+)\)\//gi, "$1")));

...或更具可读性:

var Match = /\/Date\((\d+)\)\//gi.exec(DateString);
var TheDate;
if (Match) {
TheDate = new Date(Number(Match[1]));
}

在所有这些情况下,Date 将使用嵌入在日期字符串中的 UTC 时间值进行初始化。但是,当您要求 JavaScript 格式化 日期(例如,通过 toString)时,它将使用您本地的时区来执行此操作。你没有展示你是如何输出日期的,所以我不能告诉你为什么如果你改变你的时区时区似乎没有改变(也许浏览器没有接受改变?)。当我这样做时,如果我将日期输出为字符串,如果我使用 toString,它会以英国夏令时(这是我当前的时区)显示它,如果我使用 toUTCString<,它会显示 UTC/Here's a live example使用您的原始日期和夏令时日期(我写这篇文章时的今天日期),因此即使在英国,您也可以看到 UTC 时间和本地时间之间的差异。


题外话:在 JavaScript 中,压倒性的约定是对局部变量和函数名称使用以小写字母开头的驼峰命名。所以,theDate 而不是 TheDate。首字母大写保留给构造函数(如 Date)。当然,您可以随意忽略约定,但这往往会使其他人难以阅读您的代码。

关于javascript - json 日期和时区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6905044/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com