首页 > 解决方案 > 即使使用时区设置,两个日期之间的时间差也会返回错误

问题描述

我有这个代码:

  const effectDateParsed = moment(
    new Date( `${ effectDate.split( '-' )[2] }-${ effectDate.split( '-' )[1] }-${ effectDate.split( '-' )[0] }` ),
    'Africa/Tunis',
  );
  const deadlineDateParsed = moment(
    new Date( `${ deadlineDate.split( '-' )[2] }-${ deadlineDate.split( '-' )[1] }-${ deadlineDate.split( '-' )[0] }` ),
    'Africa/Tunis',
  );
  let remainingMonths = deadlineDateParsed.diff( effectDateParsed, 'months' );

现在结果因笔记本电脑的时区而异。如果笔记本电脑的时区是非洲/突尼斯

 remainingMonths = 6 

如果在欧洲:

remainingMonths = 5 

可能这也与时区无关,这是我测试的:

  1. 手动将时区设置为非洲/突尼斯,差异是正确的
  2. 手动将时区设置为欧洲/巴黎,差异不正确
  3. 从时刻删除时区设置并重试 1 + 2,结果与设置相同。

对此有任何想法吗?

编辑:这是我正在测试的两个日期:2021/01/01 和 2020/07/01 (YYYY/MM/DD)

标签: javascriptnode.jsmomentjsejs

解决方案


也许我在这里误解了一些东西,但是像他们在这里所做的那样明确设置时区,对我来说都适用,Africa/Tunis并且Europe/Paris

const diffEuropeZone = moment.tz("2021-01-01", "Europe/Paris").diff(moment.tz("2020-07-01","Europe/Paris"), "months");

const diffAfricaZone = moment.tz("2021-01-01", "Africa/Tunis").diff(moment.tz("2020-07-01","Africa/Tunis"), "months");

console.log("diff Europe-zone = ",diffEuropeZone); // logs 6
console.log("diff Africa-zone = ",diffAfricaZone ); // logs 6
<script src="https://momentjs.com/downloads/moment.min.js"></script>
<script src="https://momentjs.com/downloads/moment-timezone-with-data.min.js"></script>


推荐阅读