首页 > 解决方案 > 在设定的时区中查找两个日期之间的差异

问题描述

我正在尝试制作一个计时器,在设定的时区倒计时一周的剩余时间。最初,我是用 PHP 做的,但是我试图用 Javascript 来做。最初我使用此代码:

date_default_timezone_set('Australia/Sydney');
$days = (new DateTime())->diff(new DateTime('1970-01-04'))->format('%a');
$week = ceil($days/7)-2544;
$day = ceil($days/7)*7 - $days;
$hour = 24-(new DateTime())->diff(new DateTime('00:00:00'))->format('%H');

我希望它给出自固定周以来的周数,这就是它本周$week =...-2544给出 24 或 25 或其他内容的原因。我的问题是我无法弄清楚如何在纯 Javascript 中做到这一点。

目前我有这个:

var time = new Date().toLocaleString("en-GB",{timeZone:"Australia/Sydney"});

这给了我26/03/2019 11:31:52上次运行该功能时的情况。

到那时使用

var time = new Date(-1*1000*60*60*10).toLocaleString("en-GB",{timeZone:"Australia/Sydney"});

给我0/0/1970 00:00:00

我有两个日期,我需要找出它们之间的区别。

我的问题是我似乎无法弄清楚如何找到这种差异。它似乎不允许我使用.getTime(),我认为这可能是因为日期可能只是我需要以某种方式格式化才能工作的字符串,就像在 PHP 中所做的那样。

谁能帮我找出毫秒之间的差异?

标签: javascriptphp

解决方案


您可以对 Date 对象执行数学运算(+、- 等)

所以使用 Date 对象,如果你需要字符串版本,存储在另一个变量中

    var time1 = new Date();
    var time1String = time1.toLocaleString("en-GB",{timeZone:"Australia/Sydney"});
    var time2 = new Date(-1*1000*60*60*10);
    var time2String = time2.toLocaleString("en-GB",{timeZone:"Australia/Sydney"});
    console.log(`The difference between ${time1String} and ${time2String} is ${time1-time2}ms`);


推荐阅读