578 Stimmen

Wie berechnet man die Anzahl der Tage zwischen zwei Daten?

Ein Beispiel: Zwei Daten in Eingabefeldern:

<input id="first" value="1/1/2000"/>
<input id="second" value="1/1/2001"/>

<script>
  alert(datediff("day", first, second)); // what goes here?
</script>

Wie ermittle ich die Anzahl der Tage zwischen zwei Daten in JavaScript?

20 Stimmen

In 99 % der Fälle, in denen der Benutzer nach der "Anzahl der Tage zwischen zwei Daten" fragt, versteht er nicht, dass er versucht, Äpfel mit Birnen zu vergleichen. Das Problem wird so einfach, wenn man fragt: "Wie viele DATEN liegen in einem DATUMSBEREICH?", oder wie viele Quadrate ich auf dem Kalender ankreuzen muss. Die Verwirrung wird uns durch die datetime-Datenstruktur auferlegt, die reiner Unfug ist. Es gibt so etwas wie datetime nicht, es gibt Datum und es gibt Zeit, zwei sehr unterschiedliche Objekte sowohl in der Natur als auch im Verhalten.

0 Stimmen

Für eine Funktion, die die Differenz in (ganze) Zeiteinheiten aufteilt, verwenden Sie die Antwort unter stackoverflow.com/a/53092438/3787376 .

1 Stimmen

Meiner Meinung nach sollte diese Frage gestrichen oder zumindest mit "vermeiden" gekennzeichnet werden, da die meisten Antworten entweder falsch oder von verschiedenen Bibliotheken abhängig sind.

3voto

OhhhThatVarun Punkte 3381

Einfach, leicht und anspruchsvoll. Diese Funktion wird alle 1 Sekunde aufgerufen, um die Zeit zu aktualisieren.

const year = (new Date().getFullYear());
const bdayDate = new Date("04,11,2019").getTime(); //mmddyyyy

// countdown
let timer = setInterval(function () {

    // get today's date
    const today = new Date().getTime();

    // get the difference
    const diff = bdayDate - today;

    // math
    let days = Math.floor(diff / (1000 * 60 * 60 * 24));
    let hours = Math.floor((diff % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
    let minutes = Math.floor((diff % (1000 * 60 * 60)) / (1000 * 60));
    let seconds = Math.floor((diff % (1000 * 60)) / 1000);

}, 1000);

3voto

Sumit Joshi Punkte 1002

Eine bessere Lösung von

Zeitanteil ignorieren

wird 0 zurückgegeben, wenn die beiden Daten gleich sind.

function dayDiff(firstDate, secondDate) {
  firstDate = new Date(firstDate);
  secondDate = new Date(secondDate);
  if (!isNaN(firstDate) && !isNaN(secondDate)) {
    firstDate.setHours(0, 0, 0, 0); //ignore time part
    secondDate.setHours(0, 0, 0, 0); //ignore time part
    var dayDiff = secondDate - firstDate;
    dayDiff = dayDiff / 86400000; // divide by milisec in one day
    console.log(dayDiff);
  } else {
    console.log("Enter valid date.");
  }
}

$(document).ready(function() {
  $('input[type=datetime]').datepicker({
    dateFormat: "mm/dd/yy",
    changeMonth: true,
    changeYear: true
  });
  $("#button").click(function() {
    dayDiff($('#first').val(), $('#second').val());
  });
});

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<link rel="stylesheet" href="http://stackoverflow.com//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
<script src="//code.jquery.com/ui/1.12.1/jquery-ui.js"></script>

<input type="datetime" id="first" value="12/28/2016" />
<input type="datetime" id="second" value="12/28/2017" />
<input type="button" id="button" value="Calculate">

3voto

Ramees Rahath Punkte 31

Ich habe den unten stehenden Code verwendet, um die Funktion des Buchungsdatums für einen Nachrichtenbeitrag zu testen. Ich berechne die Minute oder Stunde oder den Tag oder das Jahr basierend auf dem Buchungsdatum und dem aktuellen Datum.

var startDate= new Date("Mon Jan 01 2007 11:00:00");
var endDate  =new Date("Tue Jan 02 2007 12:50:00");
var timeStart = startDate.getTime();
var timeEnd = endDate.getTime();
var yearStart = startDate.getFullYear();
var yearEnd   = endDate.getFullYear();
if(yearStart == yearEnd)
 {
  var hourDiff = timeEnd - timeStart; 
  var secDiff = hourDiff / 1000;
  var minDiff = hourDiff / 60 / 1000; 
  var hDiff = hourDiff / 3600 / 1000; 
  var myObj = {};
  myObj.hours = Math.floor(hDiff);
  myObj.minutes = minDiff  
  if(myObj.hours >= 24)
   {
    console.log(Math.floor(myObj.hours/24) + "day(s) ago")
   } 
 else if(myObj.hours>0)
  {
   console.log(myObj.hours +"hour(s) ago")
  }
 else
  {
   console.log(Math.abs(myObj.minutes) +"minute(s) ago")
  }
}
else
{
var yearDiff = yearEnd - yearStart;
console.log( yearDiff +" year(s) ago");
}

0 Stimmen

Erläutern Sie bitte Ihren Code und wie Sie das Problem gelöst haben. Das bloße Einfügen von Code gilt als schlechte Antwort.

2 Stimmen

Dieser Code kann zwar die Frage beantworten, bietet aber zusätzlichen Kontext in Bezug auf wie und/oder warum die Lösung des Problems würde den langfristigen Wert der Antwort verbessern.

0 Stimmen

Danke @MarcoScabbiolo,@Michael Parker für die Kommentare.Da ich neu auf Stackoverflow bin in Bezug auf die Beantwortung, war ich mir nicht bewusst, wie die Lösung proivided werden sollte

3voto

zloctb Punkte 9390
function formatDate(seconds, dictionary) {
    var foo = new Date;
    var unixtime_ms = foo.getTime();
    var unixtime = parseInt(unixtime_ms / 1000);
    var diff = unixtime - seconds;
    var display_date;
    if (diff <= 0) {
        display_date = dictionary.now;
    } else if (diff < 60) {
        if (diff == 1) {
            display_date = diff + ' ' + dictionary.second;
        } else {
            display_date = diff + ' ' + dictionary.seconds;
        }
    } else if (diff < 3540) {
        diff = Math.round(diff / 60);
        if (diff == 1) {
            display_date = diff + ' ' + dictionary.minute;
        } else {
            display_date = diff + ' ' + dictionary.minutes;
        }
    } else if (diff < 82800) {
        diff = Math.round(diff / 3600);
        if (diff == 1) {
            display_date = diff + ' ' + dictionary.hour;
        } else {
            display_date = diff + ' ' + dictionary.hours;
        }
    } else {
        diff = Math.round(diff / 86400);
        if (diff == 1) {
            display_date = diff + ' ' + dictionary.day;
        } else {
            display_date = diff + ' ' + dictionary.days;
        }
    }
    return display_date;
}

2voto

MC Emperor Punkte 20560

Ich hatte vor kurzem die gleiche Frage, und da ich aus der Java-Welt komme, habe ich mich sofort auf die Suche nach einer JSR 310-Implementierung für JavaScript gemacht. JSR 310 ist eine Datums- und Zeit-API für Java (standardmäßig ausgeliefert ab Java 8). Ich denke, die API ist sehr gut konzipiert.

Glücklicherweise gibt es eine direkte Schnittstelle zu Javascript, die js-joda .

Fügen Sie zunächst js-joda in die Datei <head> :

<script
    src="https://cdnjs.cloudflare.com/ajax/libs/js-joda/1.11.0/js-joda.min.js"
    integrity="sha512-piLlO+P2f15QHjUv0DEXBd4HvkL03Orhi30Ur5n1E4Gk2LE4BxiBAP/AD+dxhxpW66DiMY2wZqQWHAuS53RFDg=="
    crossorigin="anonymous"></script>

Dann machen Sie einfach Folgendes:

let date1 = JSJoda.LocalDate.of(2020, 12, 1);
let date2 = JSJoda.LocalDate.of(2021, 1, 1);
let daysBetween = JSJoda.ChronoUnit.DAYS.between(date1, date2);

Jetzt daysBetween enthält die Anzahl der Tage, die dazwischen liegen. Beachten Sie, dass das Enddatum exklusiv .

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X