javascript – 使用UTC存储在服务器上的JS日期计算?

我从服务器传回UTC日期,我需要一些JS来查找“now”和从服务器传回的日期之间的差异.

我现在正在尝试一些类似的东西

var lastUpdatedDate = moment(utcStringFromServer);
var currentDate = moment();
var diff = currentDate - lastUpdatedDate;

问题是,这给出了一个非常无效的答案,因为UTC从服务器下来,并且创建一个新的时刻()使它成为本地的.如何针对完整的UTC进行计算,以便与任何本地时序无关?

最佳答案 您不太了解的是,日期存储为自UTC时间1970年1月1日午夜以来的毫秒数.在浏览器的本地时区中确定日期/时间时,首先计算出UTC时间内的日期/时间,然后添加/减去本地时区偏移量.

当您使用dateVar或dateVar.valueOf()或类似方法将Date转回数字时,它会回到自01/01 / 1970T00:00:00Z以来的毫秒数.

关于这一点的好处是,无论何时以UTC格式化日期(作为数字或ISO字符串格式),当它被Javascript的Date对象自动转换为本地时间时,它与原始时间完全相同价值,仅在当地时间表示.

因此,在您的情况下,当您将本地日期转换为数字时,您将获得UTC的毫秒值,您将以毫秒为单位减去UTC中的值.结果将是从服务器到新Date()调用的时间之间经过的毫秒数.

如果你想让服务器的时间戳不被转换为本地时间,那么它变得棘手,因为你想要显示小时和分钟,无论时区如何.但在这种情况下,这不是你需要的.

点赞