如何计算两个日期之间的天数?
P粉604848588
P粉604848588 2023-08-23 16:51:49
0
2
401
<p>例如,输入框中给出两个日期:</p> <pre class="brush:php;toolbar:false;">&lt;input id=&quot;first&quot; value=&quot;1/1/2000&quot;/&gt; &lt;input id=&quot;second&quot; value=&quot;1/1/2001&quot;/&gt; &lt;script&gt; alert(datediff(&quot;day&quot;, first, second)); // what goes here? &lt;/script&gt;</pre> <p>如何在 JavaScript 中获取两个日期之间的天数?</p>
P粉604848588
P粉604848588

모든 응답(2)
P粉968008175

截至撰写本文时,只有其他答案之一可以正确处理 DST(夏令时)转换。以下是位于加利福尼亚州的系统上的结果:

1/1/2013- 3/10/2013- 11/3/2013-
User       Formula                      2/1/2013  3/11/2013  11/4/2013  Result
---------  ---------------------------  --------  ---------  ---------  ---------
Miles                   (d2 - d1) / N   31        0.9583333  1.0416666  Incorrect
some         Math.floor((d2 - d1) / N)  31        0          1          Incorrect
fuentesjr    Math.round((d2 - d1) / N)  31        1          1          Correct
toloco     Math.ceiling((d2 - d1) / N)  31        1          2          Incorrect

N = 86400000

虽然 Math.round 返回正确的结果,但我认为它有点笨拙。相反,通过显式考虑 DST 开始或结束时 UTC 偏移量的变化,我们可以使用精确的算术:

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($('#first').val(), $('#second').val()));

说明

JavaScript 日期计算很棘手,因为 Date 对象在内部存储 UTC 时间,而不是本地时间。例如,3/10/2013 12:00 AM 太平洋标准时间 (UTC-08:00) 存储为 3/10/2013 8:00 AM UTC,3/11/2013 12:00 AM 太平洋夏令时间 ( UTC-07:00) 存储为 3/11/2013 7:00 AM UTC。这一天,当地时间午夜到午夜仅比 UTC 23 小时!

虽然当地时间的一天可以多于或少于 24 小时,但 UTC 的一天始终恰好是 24 小时。1 上面显示的 daysBetween 方法利用了这一点通过首先调用 treatAsUTC 将两个本地时间调整为午夜 UTC,然后再进行减法和除法来了解这一事实。

1。 JavaScript 忽略闰秒。

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!