recherche

Maison  >  Questions et réponses  >  le corps du texte

Comment calculer le nombre de jours entre deux dates ?

<p>Par exemple, deux dates sont indiquées dans la zone de saisie : </p> <pre class="brush:php;toolbar:false;"><input id="first" value="1/1/2000"/> <ID d'entrée="seconde" valeur ="1/1/2001"/> <script> alert(datediff("jour", premier, deuxième)); // que se passe-t-il ici ? </script></pre> <p>Comment obtenir le nombre de jours entre deux dates en JavaScript ? </p>
P粉604848588P粉604848588467 Il y a quelques jours533

répondre à tous(2)je répondrai

  • P粉968008175

    P粉9680081752023-08-24 14:38:40

    Au moment d'écrire ces lignes, une seule des autres réponses gère correctement la conversion DST (Daylight Savings Time). Voici les résultats sur un système situé en Californie :

    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

    Bien que Math.round renvoie le résultat correct, je pense que c'est un peu maladroit. Au lieu de cela, en tenant compte explicitement du changement de décalage UTC lorsque l'heure d'été commence ou se termine, nous pouvons utiliser une arithmétique précise :

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

    Instructions

    Les calculs de date JavaScript sont délicats car les objets Date stockent l'heure UTC en interne, pas l'heure locale. Par exemple, le 10/03/2013 à 00h00, heure standard du Pacifique (UTC-08:00) est stocké sous la forme 10/03/2013 à 8h00 UTC et 11/03/2013 à 00h00, heure avancée du Pacifique ( UTC-07 :00) stocké le 11/03/2013 à 7h00 UTC. Ce jour-là, l'heure locale de minuit à minuit n'a que 23 heures d'avance sur UTC !

    Alors qu'une journée en heure locale peut durer plus ou moins de 24 heures, une journée en UTC dure toujours exactement 24 heures. 1 Le daysBetween 方法利用了这一点通过首先调用 treatAsUTC ci-dessus ajuste les deux heures locales à minuit UTC, puis effectue la soustraction et la division pour comprendre ce fait.

    1. JavaScript ignore les secondes intercalaires.

    répondre
    0
  • P粉186897465

    P粉1868974652023-08-24 12:44:32

    Voici une implémentation datediffrapide et sale de comme preuve de concept pour résoudre le problème posé dans la question. Cela repose sur le fait que vous pouvez obtenir le nombre de millisecondes écoulées entre deux dates en les soustrayant, ce qui les contraint à leurs valeurs numériques d'origine (nombre de millisecondes depuis début 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"/>

    répondre
    0
  • Annulerrépondre