Bagaimana untuk mengira bilangan hari antara dua tarikh?
P粉604848588
P粉604848588 2023-08-23 16:51:49
0
2
539
<p>Sebagai contoh, dua tarikh diberikan dalam kotak input: </p> <pre class="brush:php;toolbar:false;"><input id="first" value="1/1/2000"/> <input id="second"nilai="1/1/2001"/> <skrip> alert(datediff("hari", pertama, kedua)); </script></pre> <p>Bagaimana untuk mendapatkan bilangan hari antara dua tarikh dalam JavaScript? </p>
P粉604848588
P粉604848588

membalas semua(2)
P粉968008175

Setakat artikel ini ditulis, hanya satu daripada jawapan lain yang mengendalikan penukaran DST (Masa Penjimatan Siang) dengan betul. Berikut adalah keputusan pada sistem yang terletak di California:

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

Walaupun Math.round mengembalikan hasil yang betul, saya rasa ia agak kekok. Sebaliknya, dengan mengambil kira secara jelas perubahan dalam offset UTC apabila DST bermula atau tamat, kita boleh menggunakan aritmetik tepat:

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()));

Arahan

Pengiraan tarikh JavaScript adalah rumit kerana Date objek menyimpan masa UTC secara dalaman, bukan waktu tempatan. Contohnya, 3/10/2013 12:00 PG Waktu Standard Pasifik (UTC-08:00) disimpan sebagai 3/10/2013 8:00 PG UTC dan 3/11/2013 12:00 PG Waktu Siang Pasifik ( UTC-07:00) disimpan sebagai 3/11/2013 7:00 AM UTC. Pada hari ini, waktu tempatan dari tengah malam hingga tengah malam hanya 23 jam lebih awal daripada UTC!

Walaupun sehari dalam waktu tempatan boleh menjadi lebih atau kurang daripada 24 jam, sehari dalam UTC sentiasa tepat 24 jam. 1 daysBetween 方法利用了这一点通过首先调用 treatAsUTC yang ditunjukkan di atas melaraskan dua waktu tempatan kepada UTC tengah malam dan kemudian melakukan penolakan dan pembahagian untuk memahami fakta ini.

1. JavaScript mengabaikan saat lompat.

P粉186897465

Berikut adalah datediffcepat dan kotorpelaksanaan sebagai bukti konsep untuk menyelesaikan masalah yang dikemukakan dalam soalan. Ia bergantung pada fakta bahawa anda boleh mendapatkan bilangan milisaat yang berlalu antara dua tarikh dengan menolaknya, yang memaksa mereka kepada nilai berangka asalnya (bilangan milisaat sejak awal tahun 1970).

/**
 * Take the difference between the dates and divide by milliseconds per day.
 * Round to nearest whole number to deal with DST.
 */
function datediff(first, second) {        
    return Math.round((second - first) / (1000 * 60 * 60 * 24));
}

/**
 * new Date("dateString") is browser-dependent and discouraged, so we'll write
 * a simple parse function for U.S. date format (which does no error checking)
 */
function parseDate(str) {
    var mdy = str.split('/');
    return new Date(mdy[2], mdy[0] - 1, mdy[1]);
}

alert(datediff(parseDate(first.value), parseDate(second.value)));
<input id="first" value="1/1/2000"/>
<input id="second" value="1/1/2001"/>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan