Date.getUTCDate()在不同的时区中返回不同的结果-Javascript

时间:2018-08-27 02:12:19

标签: javascript date utc

JavaScript的Date()对象让我发疯。我正在尝试获取当前UTC日期(mm/dd/yyyy)。我需要在世界任何地方都一样的日期。因此,为此,我使用了类似(new Date()).getUTCDate())方法的UTC方法。但是最近,当用户抱怨时,我发现返回的值在世界各地都不尽相同。

我需要一种确定的方法来根据通用时间获取当前日期(而不是过去)。

(new Date()).getTime()对我不起作用,因为它会以毫秒为单位返回。

我的代码:

function getToday() {
    var today = new Date();
    var dd = today.getUTCDate();
    var mm = today.getUTCMonth() + 1; //January is 0!
    var yyyy = today.getUTCFullYear();

    if (dd < 10) {
        dd = '0' + dd
    }

    if (mm < 10) {
        mm = '0' + mm
    }

    today = mm + '/' + dd + '/' + yyyy
    return today;
}

console.log(getToday());

编辑:

我联系了该用户,并告诉他基本执行(new Date()).getUTCDate())。他一天休息了(正确答案是27)

info

此外,他的时区偏移为180

offset

他正在Windows计算机上使用Chrome(我不知道哪个版本)

EDIT2:

我刚刚做过一些数学运算,但是发现了一些奇怪的东西。

我的用户说,当一天更改时,他每天下午12:00都会遇到问题。他告诉我他晚上9:53有问题。知道他的时区偏移量为180分钟,而我的时区偏移量为240,因此我可以通过执行myTime + offsetDifference来计算此时的时间。但是(((9*60 + 53) + (240 - 180)) / 60)等于大约11PM。因此,他的PC时间必须落后1小时。

他本可以手动设置时间,但时区错误。

1 个答案:

答案 0 :(得分:1)

显然,我的用户未设置时区,而是设置了时钟。如果是这样,正如乔纳森·格雷(Jonathan Gray)指出的那样,即使UTC时间在本地进行检查,也将是错误的。他已经固定了时区,并且可以解决。

此外,正如Phil所指出的,如果要使用任何可靠的通用标准时间,则必须使用时间永远正确的受信任后端。为此,我还找到了一个名为World Clock API的网站。但是,正如我注意到的那样,要获得可靠的服务并保证它在您的站点启动时就可以启动,则必须将其集成到服务器中。一种简单的方法是使用PHP的time()方法,并计算相对于客户端时间的偏移量。