回到课程

距离明天还有多少秒?

重要程度: 5

写一个函数 getSecondsToTomorrow(),返回距离明天的秒数。

例如,现在是 23:00,那么:

getSecondsToTomorrow() == 3600

P.S. 该函数应该在任意一天都能正确运行。那意味着,它不应具有“今天”的硬编码值。

为获取距离明天的毫秒数,我们可以用“明天 00:00:00”这个日期减去当前的日期。

首先我们生成“明天”,然后对其进行减法操作:

function getSecondsToTomorrow() {
  let now = new Date();

  // tomorrow date
  let tomorrow = new Date(now.getFullYear(), now.getMonth(), now.getDate()+1);

  let diff = tomorrow - now; // difference in ms
  return Math.round(diff / 1000); // convert to seconds
}

另一种解法:

function getSecondsToTomorrow() {
  let now = new Date();
  let hour = now.getHours();
  let minutes = now.getMinutes();
  let seconds = now.getSeconds();
  let totalSecondsToday = (hour * 60 + minutes) * 60 + seconds;
  let totalSecondsInADay = 86400;

  return totalSecondsInADay - totalSecondsToday;
}

请注意,很多国家有夏令时(DST),因此他们的一天可能有 23 小时或者 25 小时。我们对这些天数要区别对待。