【问题标题】:moment returning wrong difference between two dates even with timezone setup即使使用时区设置,两个日期之间的时间差也会返回错误
【发布时间】:2020-06-25 17:43:35
【问题描述】:

我有这个代码:

  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)

【问题讨论】:

  • 我会考虑使用更强大的日期时间库
  • 我会的,不幸的是这不取决于我
  • 如果您有任何建议,我愿意在这里接受建议

标签: javascript node.js momentjs ejs


【解决方案1】:

也许我在这里误解了一些东西,但是像here 那样明确设置时区,对Africa/TunisEurope/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>

【讨论】:

    猜你喜欢
    • 2014-02-19
    • 2021-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-14
    • 1970-01-01
    • 2021-09-11
    相关资源
    最近更新 更多