在 javascript 中计算时差时的奇怪行为

Strange behaviour when calculating time difference in javascript

我正在尝试在客户端计算机上本地计算时间以指定某个促销活动的结束时间。我使用以下代码这样做:

var targetDate = new Date(1442055673000);
var currentDate = new Date;
setInterval(updateTime, 1000);
function updateTime() {
  var diff = new Date(targetDate - new Date());
  var days = diff.getUTCDay();
  var hours = diff.getUTCHours();
  var minutes = diff.getUTCMinutes();
  var seconds = diff.getUTCSeconds();
  console.log(days + " : " + hours + " : " + minutes + " : " + seconds);}

促销结束日期是 09.12.2015,今天是 09.09.2015。无论出于何种原因,差异计算不正确(它表明差异是 6 天而不是 3 天)。

The getUTCDay() method returns the day of the week in the specified date according to universal time, where 0 represents Sunday.

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getUTCDay

您正在根据日期差异创建日期,这是非常糟糕的日期差异表示。获取天数、小时数和其余数的最简单方法就是使用整数除法:

  var diff = Math.floor(new Date(targetDate - new Date()) / 1000);
  var days = Math.floor(diff / (60*60*24)); 
  diff %= 60*60*24;
  var hours = Math.floor(diff / (60*60));
  diff %= 60*60;
  var minutes = Math.floor(diff / (60));
  diff %= 60;
  var seconds = diff;