格林尼治标准时间和欧洲格式之间的天数

时间:2016-02-09 12:58:49

标签: javascript date

我知道这个问题已被问了一千次,但我试图让javascript向我展示两个日期之间的日子。我看过这篇文章:How do i get the number of days between two dates in javascript

我使用此代码的其中一条评论:

<input type="text" name="sod" class="startd" value="10/02/2016" />
<input type="text" name="dos" class="endd"  value="12/02/2016" />

  <script>
  function treatAsUTC(date) {
      var result = new Date(date);
      result.setMinutes(result.getMinutes() - result.getTimezoneOffset());
      return result;
  }

  function daysBetween(startDate, endDate) {
      var millisecondsPerDay = 24 * 60 * 60 * 1000;
      return (treatAsUTC(endDate) - treatAsUTC(startDate)) / millisecondsPerDay;
  }

  alert(daysBetween($('.startd').val(), $('.endd').val()));
  </script>

来自javascript的reulst给了61天,但是我希望它读作dd / mm / yyyy而不是mm / dd / yyyy,因此结果应该是2天。

我已经尝试删除treatAsUTC部分,但它根本没有给出任何答案。

  function daysBetween(startDate, endDate) {
      var millisecondsPerDay = 24 * 60 * 60 * 1000;
      return (endDate - startDate) / millisecondsPerDay;
  }

  alert(daysBetween($('.startd').val(), $('.endd').val()));

任何人都可以帮助或指导我朝正确的方向发展吗?

提前致谢。

伊恩

1 个答案:

答案 0 :(得分:1)

  

来自javascript的reulst给了61天,但是我希望它读作dd / mm / yyyy而不是mm / dd / yyyy,因此结果应该是2天。

所以你只需要正确解析日期。原来是:

function parseDate(str) {
    var mdy = str.split('/')
    return new Date(mdy[2], mdy[0]-1, mdy[1]);
}

以m / d / y格式解析日期,因此要支持d / m / y,只需将最后一行更改为:

    return new Date(mdy[2], mdy[1]-1, mdy[0]);

稍微整理一下代码,你最终会得到类似的东西:

// Parse a date in d/m/y format as UTC
function treatAsUTC(s) {
  var b = s.split(/\D/);
  return new Date(Date.UTC(b[2], b[1]-1, b[0]));
}

function daysBetween(startDate, endDate) {
  startDate = treatAsUTC(startDate);
  endDate = treatAsUTC(endDate);
  return (endDate - startDate) / 8.64e7;
}

function calcDiff() {
  document.querySelector('#result').value = 
     (daysBetween(document.querySelector('#sod').value,
      document.querySelector('#dos').value));
}
<input type="text" id="sod" class="startd" value="10/02/2016" />d/m/y
<input type="text" id="dos" class="endd"  value="12/02/2016" />d/m/y
<br>
<button onclick="calcDiff()">Calculate difference in days</button>
<input type="text" id="result" readonly>Days

但是你实际上并不需要UTC,你可以将结果四舍五入。如果解析日期,那么毫秒将只能通过夏令时更改,四舍五入到最近的整天修复。但是我觉得使用UTC很好,因为它不需要舍入。