JavaScript无法正确计算天数差异

ffscu2ro  于 2023-04-28  发布在  Java
关注(0)|答案(1)|浏览(111)

我有以下代码

function test() {
  const endDate = new Date("2023-04-28T23:00:00-0700")
  const today = new Date()

  endDate.setHours(0, 0, 0, 0)
  today.setHours(0, 0, 0, 0)

  // Convert to local date string
  const endDateString = endDate.toLocaleDateString()
  const todayString = today.toLocaleDateString()

  // Compare local date strings
  if (endDateString === todayString) {
    return 0
  }

  const timeDifference = endDate.getTime() - today.getTime()
  const daysLeft = Math.ceil(timeDifference / (1000 * 3600 * 24))

  return daysLeft
}

console.log(test());

今天是4月27日,在英国伦敦,但是当我看到daysLeft输出时,它返回2天。我不清楚为何会出现这种情况

z4iuyo4d

z4iuyo4d1#

2是预期输出。考虑:

  • endDate最初定义的时区指示符为-7:00,而您所在位置的时区为+1:00(GMT +夏令时)。这意味着endDate是2023-04-29 07:00:00 +01:00(在您的当地时区)。在美国是星期五晚上,在西欧是星期六早上。
  • today最初约为2023-04-29 17:30:00 +0100(当地时间)。
  • 本地datetime中删除时间部分后,我们只剩下:
newDate: 2023-04-29 00:00:00 +0100
today: 2023-04-27 00:00:00 +0100

事实上,这就差了2天。
所以是的,Javascript可以“正确计算天数差异”。

相关问题