Zoeken…
Syntaxis
- nieuwe datum();
- nieuwe datum (waarde);
- nieuwe datum (dateAsString);
- nieuwe datum (jaar, maand [, dag [, uur [, minuut [, tweede [, millisecond]]]]];
parameters
Parameter | Details |
---|---|
value | Het aantal milliseconden sinds 1 januari 1970 00: 00: 00.000 UTC (Unix-tijdperk) |
dateAsString | Een datum die is opgemaakt als een tekenreeks (zie voorbeelden voor meer informatie) |
year | De jaarwaarde van de datum. Merk op dat ook de month moet worden opgegeven, anders wordt de waarde geïnterpreteerd als een aantal milliseconden. Merk ook op dat waarden tussen 0 en 99 een speciale betekenis hebben. Zie de voorbeelden. |
month | De maand, in het bereik van 0-11 . Merk op dat het gebruik van waarden buiten het opgegeven bereik voor deze en de volgende parameters niet zal resulteren in een fout, maar eerder dat de resulterende datum naar de volgende waarde "doorrolt". Zie de voorbeelden. |
day | Optioneel: de datum in het bereik 1-31 . |
hour | Optioneel: het uur, in het bereik 0-23 . |
minute | Optioneel: de minuut, in het bereik 0-59 . |
second | Optioneel: de tweede, in het bereik 0-59 . |
millisecond | Optioneel: de milliseconde, in het bereik 0-999 . |
Download de huidige tijd en datum
Gebruik new Date()
om een nieuw object Date
met de huidige datum en tijd te genereren.
Merk op dat Date()
zonder argumenten wordt opgeroepen gelijk is aan new Date(Date.now())
.
Zodra u een getFullYear()
hebt, kunt u een van de verschillende beschikbare methoden toepassen om de eigenschappen ervan te extraheren (bijvoorbeeld getFullYear()
om het 4-cijferige jaar te krijgen).
Hieronder staan enkele veel voorkomende datummethoden.
Krijg het lopende jaar
var year = (new Date()).getFullYear();
console.log(year);
// Sample output: 2016
Ontvang de huidige maand
var month = (new Date()).getMonth();
console.log(month);
// Sample output: 0
Let op: 0 = januari. Dit komt omdat maanden variëren van 0 tot 11 , dus het is vaak wenselijk om +1
aan de index toe te voegen.
Ontvang de huidige dag
var day = (new Date()).getDate();
console.log(day);
// Sample output: 31
Krijg het huidige uur
var hours = (new Date()).getHours();
console.log(hours);
// Sample output: 10
Download de huidige minuten
var minutes = (new Date()).getMinutes();
console.log(minutes);
// Sample output: 39
Krijg de huidige seconden
var seconds = (new Date()).getSeconds();
console.log(second);
// Sample output: 48
Download de huidige milliseconden
Gebruik de methode getMilliseconds
om de milliseconden (variërend van 0 tot 999) van een exemplaar van een object Date
getMilliseconds
.
var milliseconds = (new Date()).getMilliseconds();
console.log(milliseconds);
// Output: milliseconds right now
Converteer de huidige tijd en datum naar een voor mensen leesbare reeks
var now = new Date();
// convert date to a string in UTC timezone format:
console.log(now.toUTCString());
// Output: Wed, 21 Jun 2017 09:13:01 GMT
De statische methode Date.now()
retourneert het aantal milliseconden dat is verstreken sinds 1 januari 1970 00:00:00 UTC. Gebruik de methode getTime
om het aantal milliseconden te bepalen dat sinds die tijd is verstreken met een instantie van een object Date
.
// get milliseconds using static method now of Date
console.log(Date.now());
// get milliseconds using method getTime of Date instance
console.log((new Date()).getTime());
Maak een nieuw object Date
Om een nieuwe Date
gebruik object de Date()
bouwer:
zonder argumenten
Date()
maakt eenDate
instantie met de huidige tijd (tot milliseconden) en datum.
met één geheel getalargument
Date(m)
maakt eenDate
instantie met de tijd en datum die overeenkomen met de Epoch-tijd (1 januari 1970 UTC) plusm
milliseconden. Voorbeeld:new Date(749019369738)
geeft de datum zo, 26 september 1993 04:56:09 GMT .
met een stringargument
Date(dateString)
retourneert het objectDate
dat resulteert na het parseren vandateString
metDate.parse
.
met twee of meer gehele argumenten
Date(i1, i2, i3, i4, i5, i6)
leest de argumenten als jaar, maand, dag, uren, minuten, seconden, milliseconden en instantieert het overeenkomstige objectDate
. Merk op dat de maand 0 is geïndexeerd in JavaScript, dus 0 betekent januari en 11 betekent december. Voorbeeld:new Date(2017, 5, 1)
geeft 1 juni 2017 .
Datums verkennen
Merk op dat deze voorbeelden werden gegenereerd in een browser in de centrale tijdzone van de VS, tijdens zomertijd, zoals blijkt uit de code. Waar de vergelijking met UTC leerzaam was, werd Date.prototype.toISOString()
gebruikt om de datum en tijd in UTC weer te geven (de Z in de opgemaakte tekenreeks geeft UTC aan).
// Creates a Date object with the current date and time from the
// user's browser
var now = new Date();
now.toString() === 'Mon Apr 11 2016 16:10:41 GMT-0500 (Central Daylight Time)'
// true
// well, at the time of this writing, anyway
// Creates a Date object at the Unix Epoch (i.e., '1970-01-01T00:00:00.000Z')
var epoch = new Date(0);
epoch.toISOString() === '1970-01-01T00:00:00.000Z' // true
// Creates a Date object with the date and time 2,012 milliseconds
// after the Unix Epoch (i.e., '1970-01-01T00:00:02.012Z').
var ms = new Date(2012);
date2012.toISOString() === '1970-01-01T00:00:02.012Z' // true
// Creates a Date object with the first day of February of the year 2012
// in the local timezone.
var one = new Date(2012, 1);
one.toString() === 'Wed Feb 01 2012 00:00:00 GMT-0600 (Central Standard Time)'
// true
// Creates a Date object with the first day of the year 2012 in the local
// timezone.
// (Months are zero-based)
var zero = new Date(2012, 0);
zero.toString() === 'Sun Jan 01 2012 00:00:00 GMT-0600 (Central Standard Time)'
// true
// Creates a Date object with the first day of the year 2012, in UTC.
var utc = new Date(Date.UTC(2012, 0));
utc.toString() === 'Sat Dec 31 2011 18:00:00 GMT-0600 (Central Standard Time)'
// true
utc.toISOString() === '2012-01-01T00:00:00.000Z'
// true
// Parses a string into a Date object (ISO 8601 format added in ECMAScript 5.1)
// Implementations should assumed UTC because of ISO 8601 format and Z designation
var iso = new Date('2012-01-01T00:00:00.000Z');
iso.toISOString() === '2012-01-01T00:00:00.000Z' // true
// Parses a string into a Date object (RFC in JavaScript 1.0)
var local = new Date('Sun, 01 Jan 2012 00:00:00 -0600');
local.toString() === 'Sun Jan 01 2012 00:00:00 GMT-0600 (Central Standard Time)'
// true
// Parses a string in no particular format, most of the time. Note that parsing
// logic in these cases is very implementation-dependent, and therefore can vary
// across browsers and versions.
var anything = new Date('11/12/2012');
anything.toString() === 'Mon Nov 12 2012 00:00:00 GMT-0600 (Central Standard Time)'
// true, in Chrome 49 64-bit on Windows 10 in the en-US locale. Other versions in
// other locales may get a different result.
// Rolls values outside of a specified range to the next value.
var rollover = new Date(2012, 12, 32, 25, 62, 62, 1023);
rollover.toString() === 'Sat Feb 02 2013 02:03:03 GMT-0600 (Central Standard Time)'
// true; note that the month rolled over to Feb; first the month rolled over to
// Jan based on the month 12 (11 being December), then again because of the day 32
// (January having 31 days).
// Special dates for years in the range 0-99
var special1 = new Date(12, 0);
special1.toString() === 'Mon Jan 01 1912 00:00:00 GMT-0600 (Central Standard Time)`
// true
// If you actually wanted to set the year to the year 12 CE, you'd need to use the
// setFullYear() method:
special1.setFullYear(12);
special1.toString() === 'Sun Jan 01 12 00:00:00 GMT-0600 (Central Standard Time)`
// true
Converteren naar JSON
var date1 = new Date();
date1.toJSON();
Retourneert: "2016-04-14T23: 49: 08.596Z"
Een datum maken op basis van UTC
Standaard wordt een object Date
gemaakt als lokale tijd. Dit is niet altijd wenselijk, bijvoorbeeld bij het communiceren van een datum tussen een server en een client die zich niet in dezelfde tijdzone bevinden. In dit scenario wil men zich helemaal geen zorgen maken over tijdzones totdat de datum in lokale tijd moet worden weergegeven, als dat überhaupt nodig is.
Het probleem
In dit probleem willen we een specifieke datum (dag, maand, jaar) communiceren met iemand in een andere tijdzone. De eerste implementatie gebruikt naïef lokale tijden, wat resulteert in verkeerde resultaten. De tweede implementatie maakt gebruik van UTC-datums om tijdzones te vermijden waar ze niet nodig zijn.
Naïeve aanpak met verkeerde resultaten
function formatDate(dayOfWeek, day, month, year) {
var daysOfWeek = ["Sun","Mon","Tue","Wed","Thu","Fri","Sat"];
var months = ["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];
return daysOfWeek[dayOfWeek] + " " + months[month] + " " + day + " " + year;
}
//Foo lives in a country with timezone GMT + 1
var birthday = new Date(2000,0,1);
console.log("Foo was born on: " + formatDate(birthday.getDay(), birthday.getDate(),
birthday.getMonth(), birthday.getFullYear()));
sendToBar(birthday.getTime());
Voorbeelduitvoer:
Foo was born on: Sat Jan 1 2000
//Meanwhile somewhere else...
//Bar lives in a country with timezone GMT - 1
var birthday = new Date(receiveFromFoo());
console.log("Foo was born on: " + formatDate(birthday.getDay(), birthday.getDate(),
birthday.getMonth(), birthday.getFullYear()));
Voorbeelduitvoer:
Foo was born on: Fri Dec 31 1999
En dus zou Bar altijd geloven dat Foo op de laatste dag van 1999 werd geboren.
Juiste aanpak
function formatDate(dayOfWeek, day, month, year) {
var daysOfWeek = ["Sun","Mon","Tue","Wed","Thu","Fri","Sat"];
var months = ["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];
return daysOfWeek[dayOfWeek] + " " + months[month] + " " + day + " " + year;
}
//Foo lives in a country with timezone GMT + 1
var birthday = new Date(Date.UTC(2000,0,1));
console.log("Foo was born on: " + formatDate(birthday.getUTCDay(), birthday.getUTCDate(),
birthday.getUTCMonth(), birthday.getUTCFullYear()));
sendToBar(birthday.getTime());
Voorbeelduitvoer:
Foo was born on: Sat Jan 1 2000
//Meanwhile somewhere else...
//Bar lives in a country with timezone GMT - 1
var birthday = new Date(receiveFromFoo());
console.log("Foo was born on: " + formatDate(birthday.getUTCDay(), birthday.getUTCDate(),
birthday.getUTCMonth(), birthday.getUTCFullYear()));
Voorbeelduitvoer:
Foo was born on: Sat Jan 1 2000
Een datum maken op basis van UTC
Als je een Date
object wilt maken op basis van UTC of GMT, kan de Date.UTC(...)
-methode worden gebruikt. Het gebruikt dezelfde argumenten als de langste Date
constructor. Deze methode retourneert een getal dat de tijd aangeeft die is verstreken sinds 1 januari 1970, 00:00:00 UTC.
console.log(Date.UTC(2000,0,31,12));
Voorbeelduitvoer:
949320000000
var utcDate = new Date(Date.UTC(2000,0,31,12));
console.log(utcDate);
Voorbeelduitvoer:
Mon Jan 31 2000 13:00:00 GMT+0100 (West-Europa (standaardtijd))
Het is niet verwonderlijk dat het verschil tussen UTC-tijd en lokale tijd in feite de tijdzone-offset is omgezet in milliseconden.
var utcDate = new Date(Date.UTC(2000,0,31,12));
var localDate = new Date(2000,0,31,12);
console.log(localDate - utcDate === utcDate.getTimezoneOffset() * 60 * 1000);
Voorbeelduitvoer:
true
Een datumobject wijzigen
Alle setDate(...)
Date
, zoals setDate(...)
en setFullYear(...)
hebben een equivalent en hebben een argument in UTC-tijd in plaats van in lokale tijd.
var date = new Date();
date.setUTCFullYear(2000,0,31);
date.setUTCHours(12,0,0,0);
console.log(date);
Voorbeelduitvoer:
Mon Jan 31 2000 13:00:00 GMT+0100 (West-Europa (standaardtijd))
De andere UTC-specifieke modificaties zijn .setUTCMonth()
, .setUTCDate()
(voor de dag van de maand), .setUTCMinutes()
, .setUTCSeconds()
en .setUTCMilliseconds()
.
Dubbelzinnigheid vermijden met getTime () en setTime ()
Wanneer de bovenstaande methoden nodig zijn om onderscheid te maken tussen onduidelijkheid in datums, is het meestal gemakkelijker om een datum te communiceren als de hoeveelheid tijd die is verstreken sinds 1 januari 1970, 00:00:00 UTC. Dit enkele nummer vertegenwoordigt een enkel tijdstip en kan indien nodig worden omgezet in lokale tijd.
var date = new Date(Date.UTC(2000,0,31,12));
var timestamp = date.getTime();
//Alternatively
var timestamp2 = Date.UTC(2000,0,31,12);
console.log(timestamp === timestamp2);
Voorbeelduitvoer:
true
//And when constructing a date from it elsewhere...
var otherDate = new Date(timestamp);
//Represented as an universal date
console.log(otherDate.toUTCString());
//Represented as a local date
console.log(otherDate);
Voorbeeld output:
Mon, 31 Jan 2000 12:00:00 GMT Mon Jan 31 2000 13:00:00 GMT+0100 (West-Europa (standaardtijd))
Converteren naar een tekenreeksindeling
Converteer naar String
var date1 = new Date();
date1.toString();
Retouren: "Vrij 15 april 2016 07:48:48 GMT-0400 (Eastern Daylight Time)"
Omzetten in tijdreeks
var date1 = new Date();
date1.toTimeString();
Retourneert: "07:48:48 GMT-0400 (Eastern Daylight Time)"
Omzetten naar datumreeks
var date1 = new Date();
date1.toDateString();
Retourneert: "do 14 apr. 2016"
Omzetten naar UTC-reeks
var date1 = new Date();
date1.toUTCString();
Retouren: "Vr, 15 apr 2016 11:48:48 GMT"
Converteren naar ISO-reeks
var date1 = new Date();
date1.toISOString();
Retourneert: "2016-04-14T23: 49: 08.596Z"
Converteer naar GMT String
var date1 = new Date();
date1.toGMTString();
Retouren: "Do, 14 apr 2016 23:49:08 GMT"
Deze functie is gemarkeerd als verouderd, zodat sommige browsers deze in de toekomst mogelijk niet meer ondersteunen. Er wordt voorgesteld om in plaats daarvan toUTCString () te gebruiken.
Omzetten naar lokale datumreeks
var date1 = new Date();
date1.toLocaleDateString();
Retouren: "14-04-2016"
Deze functie retourneert standaard een locale gevoelige datumstring op basis van de locatie van de gebruiker.
date1.toLocaleDateString([locales [, options]])
kan worden gebruikt om specifieke locaties te bieden, maar is browser-implementatie specifiek. Bijvoorbeeld,
date1.toLocaleDateString(["zh", "en-US"]);
zou proberen de tekenreeks in de Chinese taal af te drukken met het Engels van de Verenigde Staten als reserve. De optieparameter kan worden gebruikt om specifieke opmaak te bieden. Bijvoorbeeld:
var options = { weekday: 'long', year: 'numeric', month: 'long', day: 'numeric' };
date1.toLocaleDateString([], options);
zou resulteren in
"Donderdag 14 april 2016".
Zie het MDN voor meer informatie.
Een datumobject verhogen
Om datumobjecten in Javascript te verhogen, kunnen we dit meestal doen:
var checkoutDate = new Date(); // Thu Jul 21 2016 10:05:13 GMT-0400 (EDT)
checkoutDate.setDate( checkoutDate.getDate() + 1 );
console.log(checkoutDate); // Fri Jul 22 2016 10:05:13 GMT-0400 (EDT)
Het is mogelijk om setDate
te gebruiken om de datum te veranderen in een dag in de volgende maand door een waarde te gebruiken die groter is dan het aantal dagen in de huidige maand -
var checkoutDate = new Date(); // Thu Jul 21 2016 10:05:13 GMT-0400 (EDT)
checkoutDate.setDate( checkoutDate.getDate() + 12 );
console.log(checkoutDate); // Tue Aug 02 2016 10:05:13 GMT-0400 (EDT)
Hetzelfde geldt voor andere methoden zoals getHours (), getMonth (), enz.
Werkdagen toevoegen
Als u werkdagen wilt toevoegen (in dit geval neem ik aan dat maandag - vrijdag), kunt u de functie setDate
, hoewel u een beetje extra logica nodig hebt om rekening te houden met de weekenden (uiteraard houdt dit geen rekening met nationale feestdagen) -
function addWorkDays(startDate, days) {
// Get the day of the week as a number (0 = Sunday, 1 = Monday, .... 6 = Saturday)
var dow = startDate.getDay();
var daysToAdd = days;
// If the current day is Sunday add one day
if (dow == 0)
daysToAdd++;
// If the start date plus the additional days falls on or after the closest Saturday calculate weekends
if (dow + daysToAdd >= 6) {
//Subtract days in current working week from work days
var remainingWorkDays = daysToAdd - (5 - dow);
//Add current working week's weekend
daysToAdd += 2;
if (remainingWorkDays > 5) {
//Add two days for each working week by calculating how many weeks are included
daysToAdd += 2 * Math.floor(remainingWorkDays / 5);
//Exclude final weekend if remainingWorkDays resolves to an exact number of weeks
if (remainingWorkDays % 5 == 0)
daysToAdd -= 2;
}
}
startDate.setDate(startDate.getDate() + daysToAdd);
return startDate;
}
Krijg het aantal milliseconden dat is verstreken sinds 1 januari 1970 00:00:00 UTC
De statische methode Date.now
retourneert het aantal milliseconden dat is verstreken sinds 1 januari 1970 00:00:00 UTC. Gebruik de methode getTime
om het aantal milliseconden te bepalen dat sinds die tijd is verstreken met een instantie van een object Date
.
// get milliseconds using static method now of Date
console.log(Date.now());
// get milliseconds using method getTime of Date instance
console.log((new Date()).getTime());
Een JavaScript-datum opmaken
Een JavaScript-datum opmaken in moderne browsers
In moderne browsers (*) kunt u met Date.prototype.toLocaleDateString()
de opmaak van een Date
op een handige manier definiëren.
Het vereist het volgende formaat:
dateObj.toLocaleDateString([locales [, options]])
De parameter locales
moet een tekenreeks zijn met een BCP 47-taaltag of een reeks van dergelijke tekenreeksen.
De parameter options
moet een object zijn met enkele of alle van de volgende eigenschappen:
- localeMatcher : mogelijke waarden zijn
"lookup"
en"best fit"
; de standaard is"best fit"
- timeZone : de enige waarde die implementaties moeten herkennen is
"UTC"
; de standaardwaarde is de standaardtijdzone van de runtime - hour12 : mogelijke waarden zijn
true
enfalse
; de standaard is locale afhankelijk - formatMatcher : mogelijke waarden zijn
"basic"
en"best fit"
; de standaard is"best fit"
- weekdag : mogelijke waarden zijn
"narrow"
,"short"
&"long"
- tijdperk : mogelijke waarden zijn
"narrow"
,"short"
&"long"
- jaar : mogelijke waarden zijn
"numeric"
&"2-digit"
- maand : mogelijke waarden zijn
"numeric"
,"2-digit"
,"narrow"
,"short"
&"long"
- dag : mogelijke waarden zijn
"numeric"
&"2-digit"
- uur : mogelijke waarden zijn
"numeric"
&"2-digit"
- minuut : mogelijke waarden zijn
"numeric"
&"2-digit"
- tweede : mogelijke waarden zijn
"numeric"
&"2-digit"
- timeZoneName : mogelijke waarden zijn
"short"
&"long"
Hoe te gebruiken
var today = new Date().toLocaleDateString('en-GB', {
day : 'numeric',
month : 'short',
year : 'numeric'
});
Uitvoer indien uitgevoerd op 24 januari 2036:
'24 Jan 2036'
Aangepast worden
Als Date.prototype.toLocaleDateString()
niet flexibel genoeg is om aan al uw behoeften te voldoen, kunt u overwegen een aangepast Date-object te maken dat er als volgt uitziet:
var DateObject = (function() {
var monthNames = [
"January", "February", "March",
"April", "May", "June", "July",
"August", "September", "October",
"November", "December"
];
var date = function(str) {
this.set(str);
};
date.prototype = {
set : function(str) {
var dateDef = str ? new Date(str) : new Date();
this.day = dateDef.getDate();
this.dayPadded = (this.day < 10) ? ("0" + this.day) : "" + this.day;
this.month = dateDef.getMonth() + 1;
this.monthPadded = (this.month < 10) ? ("0" + this.month) : "" + this.month;
this.monthName = monthNames[this.month - 1];
this.year = dateDef.getFullYear();
},
get : function(properties, separator) {
var separator = separator ? separator : '-'
ret = [];
for(var i in properties) {
ret.push(this[properties[i]]);
}
return ret.join(separator);
}
};
return date;
})();
Als u die code zou opnemen en new DateObject()
op 20 januari 2019 zou uitvoeren, zou dit een object met de volgende eigenschappen produceren:
day: 20
dayPadded: "20"
month: 1
monthPadded: "01"
monthName: "January"
year: 2019
Om een opgemaakte string te krijgen, zou je zoiets kunnen doen:
new DateObject().get(['dayPadded', 'monthPadded', 'year']);
Dat zou de volgende output opleveren:
20-01-2016
(*) Volgens de MDN betekent "moderne browsers" Chrome 24+, Firefox 29+, IE11, Edge12 +, Opera 15+ & Safari nachtelijke build