JavaScript `new Date()` 使用哪个时区?

问题描述 投票:0回答:4

我有一个 C# 应用程序,它以 JSON 格式返回身份验证令牌的到期日期,如下所示:

"expirationDate":"Fri, 27 Mar 2015 09:12:45 GMT"

在我的 TypeScript 中,我检查此处的日期是否仍然有效:

isAuthenticationExpired = (expirationDate: string): boolean => {
    var now = new Date().valueOf();
    var exp: any = Date.parse(expirationDate).valueOf();
    return exp - now <= 0;
};

我想知道的是

new Date()
返回日期时使用哪个时区?

javascript typescript date timezone timezone-offset
4个回答
22
投票

JavaScript 将使用客户端的本地时间,但它也有 UTC / GMT 方法。以下内容来自 Mozilla:

JavaScript Date 对象支持多种 UTC(通用)方法以及本地时间方法。 UTC,也称为格林威治标准时间 (GMT),是指世界时间标准设定的时间。本地时间是执行 JavaScript 的计算机已知的时间。

虽然可以使用 UTC 和本地时区的方法来访问日期和时间,但日期和时间存储在本地时区中:

注意: 请务必记住,日期和时间存储在本地时区中,并且获取日期和时间或其组成部分的基本方法也都在本地时区中工作。

参考:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date


3
投票

默认情况下,JS 将使用您的浏览器时区,但如果您想更改显示,您可以使用

toString()
函数;)

var d1=new Date();
d1.toString('yyyy-MM-dd');       //returns "2015-03-27" in IE, but not FF or Chrome
d1.toString('dddd, MMMM ,yyyy')  //returns "Friday, March 27,2015" in IE, but not FF or Chrome

3
投票

正如其他人所说,JavaScript 使用客户端系统时间,但您可以从服务器时间创建日期对象,因此每个客户端都会获得相同的当前时间。

var date = new Date("<?php echo date("Y-m-d H:i:s");?>");

它仅在页面加载时起作用。如果您想稍后检查日期是否仍然有效,那么您需要每隔几秒将当前日期与服务器日期同步一次。


3
投票

Javascript new Date() 使用哪个时区?

Date
对象存储自纪元(1970 年 1 月 1 日午夜 GMT)以来的毫秒数。它们有像
getDay
getMonth
这样的方法,可以提供本地时区的值,也有像
getUTCDay
getUTCMonth
这样的函数,可以提供 UTC(大致是 GMT)中的值。

如果您正在解析字符串,则需要确保该字符串采用

Date
知道如何解析的格式。规范中唯一定义的格式是ISO-8601的简化衍生形式:
YYYY-MM-DDTHH:mm:ss.sssZ
。但这只是在 ES5 中添加的(然后在 ES2015 和 ES2016 中更新)。字符串的时区取决于它是否具有 UTC 偏移量指示符(
Z
-08:00
+05:30
等)以及它是仅日期还是日期/时间。以下是一些示例:

function test(str) {
    const dt = new Date(str);
    const p = document.createElement("pre");
    p.textContent =
        `String: "${str}"\n` +
        `UTC:    ${dt.toISOString()}\n` +
        `Local:  ${dt.toLocaleString()}`
    ;
    document.body.appendChild(p);
}

// No UTC offset provided, date-only form => parsed as UTC:
test("2015-08-09");

// No UTC offset provided, date/time form => parsed as local time:
test("2015-08-09T09:32:54");

// Has UTC offset "Z" (for "no offset") => parsed as UTC:
test("2015-08-09T09:32:54.427Z");

// Has UTC offset -08:00 => parsed as UTC minus eight hours:
test("2015-08-09T09:32:54.427-08:00");


我不建议依赖它,但即使没有指定,所有主要的 JavaScript 引擎都将成功解析美国特有的格式

MM/DD/YYYY
MM/DD/YYYY hh:mm
MM/DD/YYYY hh:mm:ss
MM/DD/YYYY hh:mm:ss.SSS
(尽管毫秒部分)被一些人忽视)。请注意日期部分的顺序:月、日、年。拥有 UTC 偏移指示器并未得到广泛支持,并且会在大多数引擎上导致错误,因此不要包含该指示器。如果没有,所有这些都将被解析为当地时间(即使是仅包含日期的时间)。请注意,日期字段分隔符必须是
/
(
08/09/2015
),而不是
-
(
08-09-2015
)。

function test(str) {
    const dt = new Date(str);
    const p = document.createElement("pre");
    p.textContent =
        `String: "${str}"\n` +
        `UTC:    ${dt.toISOString()}\n` +
        `Local:  ${dt.toLocaleString()}`
    ;
    document.body.appendChild(p);
}

test("08/09/2015");
test("08/09/2015 09:32");
test("08/09/2015 09:32:54");
test("08/09/2015 09:32:54.427");

但再次强调:我不建议依赖它。

© www.soinside.com 2019 - 2024. All rights reserved.