Hoe krijg ik het aantal dagen tussen twee datums in JavaScript? Bijvoorbeeld, gegeven twee datums in invoervelden:
<input id="first" value="1/1/2000"/>
<input id="second" value="1/1/2001"/>
<script>
alert(datediff("day", first, second)); // what goes here?
</script>
Hier is een snelle en vieze implementatie van datediff
, als een proof of concept om het probleem op te lossen zoals gepresenteerd in de vraag. Het is gebaseerd op het feit dat je de verstreken milliseconden tussen twee datums kunt krijgen door ze van elkaar af te trekken, wat ze terugbrengt in hun primitieve getalwaarde (milliseconden sinds het begin van 1970).
// 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]);
}
function datediff(first, second) {
// Take the difference between the dates and divide by milliseconds per day.
// Round to nearest whole number to deal with DST.
return Math.round((second-first)/(1000*60*60*24));
}
alert(datediff(parseDate(first.value), parseDate(second.value)));
<input id="first" value="1/1/2000"/>
<input id="second" value="1/1/2001"/>
U moet zich ervan bewust zijn dat de "normale" Date APIs (zonder "UTC" in de naam) werken in de lokale tijdzone van de browser van de gebruiker's, dus in het algemeen kunt u problemen krijgen als uw gebruiker zich in een tijdzone bevindt die u niet'verwacht, en uw code zal moeten omgaan met zomertijd-overgangen. U zou zorgvuldig de documentatie voor het Date object en zijn methodes moeten lezen, en voor alles wat ingewikkelder is, sterk overwegen om een bibliotheek te gebruiken die meer veilige en krachtige APIs voor datummanipulatie biedt.
Ook, voor illustratie doeleinden, gebruikt de snippet named access on the window
object voor beknoptheid, maar in productie zou je gestandaardiseerde APIs zoals getElementById moeten gebruiken, of waarschijnlijker, een of ander UI framework.
Ik zou maar gaan en pak dit kleine hulpprogramma en daarin vind je functies om dit voor je te doen. Hier's een kort voorbeeld:
<script type="text/javascript" src="date.js"></script>
<script type="text/javascript">
var minutes = 1000*60;
var hours = minutes*60;
var days = hours*24;
var foo_date1 = getDateFromFormat("02/10/2009", "M/d/y");
var foo_date2 = getDateFromFormat("02/12/2009", "M/d/y");
var diff_date = Math.round((foo_date2 - foo_date1)/days);
alert("Diff date is: " + diff_date );
</script>
Hoe zit het met het gebruik van formatDate van DatePicker widget? Je zou het kunnen gebruiken om de datums te converteren in tijdstempel formaat (milliseconden sinds 01/01/1970) en dan een eenvoudige aftrekking te doen.