Date.getUTCDate() returns 不同时区的不同结果 - Javascript

Date.getUTCDate() returns different results in different timezones - Javascript

Javascript 的 Date() 对象快把我逼疯了。我正在尝试获取当前的 UTC 日期 (mm/dd/yyyy)。我需要日期在世界任何地方都相同。因此,为此,我使用了 UTC 方法,例如 (new Date()).getUTCDate()) 方法。然而最近,当一个用户投诉时,我发现世界各地返回的值都不一样。

我需要一个明确的方法来根据世界时获取当前日期(不是过去的日期)。

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

我的代码:

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)

此外,他的时区偏差是 180

他在 Windows 电脑上使用 Chrome(我不知道是什么版本)

编辑 2:

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

我的用户说他每天都在 12:00PM 遇到问题,因为日期改变了。他告诉我他在 9:53PM 时遇到了问题。知道他有 180 分钟的时区偏移,而我有 240 的时区偏移,我可以通过 myTime + offsetDifference 计算出他那一刻的时间。然而,那 (((9*60 + 53) + (240 - 180)) / 60) 等于大约晚上 11 点。所以,他的 PC 时间必须倒退 1 小时。

他可能手动设置了他的时间,但他的时区错误。

显然,我的用户没有设置他的时区,而是只设置了时钟。如果是这样,正如乔纳森格雷指出的那样,UTC 时间将是错误的,即使时间在本地检查。他已经修复了他的时区并且它成功了。

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