Hoe kan ik een tekenreeks in JavaScript naar een datum converteren?
var st = "date in some format"
var dt = new date();
var dt_st= //st in date format same as dt
Antwoord 1, autoriteit 100%
De beste tekenreeksindeling voor het ontleden van tekenreeksen is de ISO-datumnotatie samen met de JavaScript-objectconstructor Date.
Voorbeelden van ISO-formaat: YYYY-MM-DD
of YYYY-MM-DDTHH:MM:SS
.
Maar wacht!Alleen het gebruik van het “ISO-formaat” werkt op zichzelf niet betrouwbaar. Tekenreeksen worden soms geparseerd als UTC en soms als lokale tijd (op basis van browserleverancier en -versie). De beste praktijk zou altijd moeten zijn om datums op te slaan als UTC en berekeningen te maken als UTC.
Als u een datum wilt ontleden als UTC, voegt u een Ztoe, bijvoorbeeld: new Date('2011-04-11T10:20:30Z')
.
Als u een datum in UTC wilt weergeven, gebruikt u .toUTCString()
,
gebruik .toString()
om een datum in de lokale tijd van de gebruiker weer te geven.
Meer informatie over MDN | Datumen dit antwoord.
Voor oude compatibiliteit met Internet Explorer (IE-versies minder dan 9 ondersteunen geen ISO-indeling in Date-constructor), moet u datetime-tekenreeksrepresentatie naar zijn onderdelen splitsen en dan kunt u constructor gebruiken met datetime-onderdelen, bijvoorbeeld: new Date('2011', '04' - 1, '11', '11', '51', '00')
. Merk op dat het nummer van de maand 1 minder moet zijn.
Alternatieve methode – gebruik een geschikte bibliotheek:
U kunt ook profiteren van de bibliotheek moment.js waarmee parsing-datum met de opgegeven tijdzone mogelijk is.
Antwoord 2, Autoriteit 37%
Helaas kwam ik erachter dat
var mydate = new Date('2014-04-03');
console.log(mydate.toDateString());
Antwoord 3, Autoriteit 15%
var st = "26.04.2013";
var pattern = /(\d{2})\.(\d{2})\.(\d{4})/;
var dt = new Date(st.replace(pattern,'$3-$2-$1'));
en de uitvoer is:
dt => Date {Fri Apr 26 2013}
Antwoord 4, Autoriteit 9%
function stringToDate(_date,_format,_delimiter)
{
var formatLowerCase=_format.toLowerCase();
var formatItems=formatLowerCase.split(_delimiter);
var dateItems=_date.split(_delimiter);
var monthIndex=formatItems.indexOf("mm");
var dayIndex=formatItems.indexOf("dd");
var yearIndex=formatItems.indexOf("yyyy");
var month=parseInt(dateItems[monthIndex]);
month-=1;
var formatedDate = new Date(dateItems[yearIndex],month,dateItems[dayIndex]);
return formatedDate;
}
stringToDate("17/9/2014","dd/MM/yyyy","/");
stringToDate("9/17/2014","mm/dd/yyyy","/")
stringToDate("9-17-2014","mm-dd-yyyy","-")
Antwoord 5, Autoriteit 5%
moment.js (http://momentjs.com/ ) is een compleet en goed pakket voor gebruik datums en Ondersteunt ISO 8601 strings .
U kunt een stringdatum en -formaat toevoegen.
moment("12-25-1995", "MM-DD-YYYY");
en u kunt controleren of een datum geldig is.
moment("not a real date").isValid(); //Returns false
Sommige Toon voorbeelden
let dt = moment("02-01-2019", "MM-DD-YYYY");
console.log(dt.fromNow()+' |'+dt.format('LL'))
// output: "3 months ago | February 1, 2019"
Zie documentatie
http://momentjs.com/docs/#/parsing/string-format/
Aanbeveling: Ik raad aan om een pakket te gebruiken voor data die veel formaten bevat, omdat het tijdzone- en formaattijdmanagement echt een groot probleem is, het moment dat JS veel formaten oplost. Je zou gemakkelijk kunnen worden gevolgd van een eenvoudige string tot nu toe, maar ik denk dat dat een harde werk is om alle indelingen en variaties van datums te ondersteunen.
Antwoord 6, Autoriteit 4%
Geef het als een argument tot nu toe ():
var st = "date in some format"
var dt = new Date(st);
U hebt toegang tot de datum, maand, jaar met behulp van, bijvoorbeeld: dt.getMonth()
.
Antwoord 7, Autoriteit 3%
Als je de geweldige moment-bibliotheek kunt gebruiken (bijvoorbeeld in een Node.js-project), kun je je datum gemakkelijk ontleden met behulp van bijvoorbeeld
var momentDate = moment("2014-09-15 09:00:00");
en heeft toegang tot het JS-datumobject via
momentDate ().toDate();
Antwoord 8, autoriteit 3%
Voor degenen die op zoek zijn naar een kleine en slimme oplossing:
String.prototype.toDate = function(format)
{
var normalized = this.replace(/[^a-zA-Z0-9]/g, '-');
var normalizedFormat= format.toLowerCase().replace(/[^a-zA-Z0-9]/g, '-');
var formatItems = normalizedFormat.split('-');
var dateItems = normalized.split('-');
var monthIndex = formatItems.indexOf("mm");
var dayIndex = formatItems.indexOf("dd");
var yearIndex = formatItems.indexOf("yyyy");
var hourIndex = formatItems.indexOf("hh");
var minutesIndex = formatItems.indexOf("ii");
var secondsIndex = formatItems.indexOf("ss");
var today = new Date();
var year = yearIndex>-1 ? dateItems[yearIndex] : today.getFullYear();
var month = monthIndex>-1 ? dateItems[monthIndex]-1 : today.getMonth()-1;
var day = dayIndex>-1 ? dateItems[dayIndex] : today.getDate();
var hour = hourIndex>-1 ? dateItems[hourIndex] : today.getHours();
var minute = minutesIndex>-1 ? dateItems[minutesIndex] : today.getMinutes();
var second = secondsIndex>-1 ? dateItems[secondsIndex] : today.getSeconds();
return new Date(year,month,day,hour,minute,second);
};
Voorbeeld:
"22/03/2016 14:03:01".toDate("dd/mm/yyyy hh:ii:ss");
"2016-03-29 18:30:00".toDate("yyyy-mm-dd hh:ii:ss");
Antwoord 9, autoriteit 2%
Gewoon new Date(st);
Ervan uitgaande dat dit de juiste indelingis.
Antwoord 10, autoriteit 2%
new Date(2000, 10, 1)
geeft u “Wed Nov 01 2000 00:00:00 GMT+0100 (CET)”
Zie dat 0 voor de maand je januari geeft
Antwoord 11
Als u wilt converteren van het formaat “dd/MM/jjjj”. Hier is een voorbeeld:
var pattern = /^(\d{1,2})\/(\d{1,2})\/(\d{4})$/;
var arrayDate = stringDate.match(pattern);
var dt = new Date(arrayDate[3], arrayDate[2] - 1, arrayDate[1]);
Deze oplossing werkt in IE-versies van minder dan 9.
Antwoord 12
Tijdstempels moeten naar een nummer worden gegoten
var ts = '1471793029764';
ts = Number(ts); // cast it to a Number
var date = new Date(ts); // works
var invalidDate = new Date('1471793029764'); // does not work. Invalid Date
Antwoord 13
Date.parse
geeft je bijna wat je wilt. Het verslikt zich in het gedeelte am
/pm
, maar met wat hacken kun je het aan het werk krijgen:
var str = 'Sun Apr 25, 2010 3:30pm',
timestamp;
timestamp = Date.parse(str.replace(/[ap]m$/i, ''));
if(str.match(/pm$/i) >= 0) {
timestamp += 12 * 60 * 60 * 1000;
}
Antwoord 14
Converteren naar formaat pt-BR:
var dateString = "13/10/2014";
var dataSplit = dateString.split('/');
var dateConverted;
if (dataSplit[2].split(" ").length > 1) {
var hora = dataSplit[2].split(" ")[1].split(':');
dataSplit[2] = dataSplit[2].split(" ")[0];
dateConverted = new Date(dataSplit[2], dataSplit[1]-1, dataSplit[0], hora[0], hora[1]);
} else {
dateConverted = new Date(dataSplit[2], dataSplit[1] - 1, dataSplit[0]);
}
Ik hoop dat ik iemand kan helpen!!!
Antwoord 15
Voor het converteren van string tot nu toe in js gebruik ik http://momentjs.com/
moment().format('MMMM Do YYYY, h:mm:ss a'); // August 16th 2015, 4:17:24 pm
moment().format('dddd'); // Sunday
moment().format("MMM Do YY"); // Aug 16th 15
moment().format('YYYY [escaped] YYYY'); // 2015 escaped 2015
moment("20111031", "YYYYMMDD").fromNow(); // 4 years ago
moment("20120620", "YYYYMMDD").fromNow(); // 3 years ago
moment().startOf('day').fromNow(); // 16 hours ago
moment().endOf('day').fromNow(); // in 8 hours
Antwoord 16
Ik heb hiervoor een viool gemaakt, je kunt de functie toDate() op elke datumstring gebruiken en het datumformaat opgeven. Hiermee krijgt u een Date-object terug.
https://jsfiddle.net/Sushil231088/q56yd0rp/
"17/9/2014".toDate("dd/MM/yyyy", "/")
Antwoord 17
Dit antwoord is gebaseerd op het antwoordvan Kassem, maar het gaat ook om jaren met twee cijfers. Ik heb een bewerking van het antwoord van Kassem ingediend, maar voor het geval het niet is goedgekeurd, dien ik dit ook in als een afzonderlijk antwoord.
function stringToDate(_date,_format,_delimiter) {
var formatLowerCase=_format.toLowerCase();
var formatItems=formatLowerCase.split(_delimiter);
var dateItems=_date.split(_delimiter);
var monthIndex=formatItems.indexOf("mm");
var dayIndex=formatItems.indexOf("dd");
var yearIndex=formatItems.indexOf("yyyy");
var year = parseInt(dateItems[yearIndex]);
// adjust for 2 digit year
if (year < 100) { year += 2000; }
var month=parseInt(dateItems[monthIndex]);
month-=1;
var formatedDate = new Date(year,month,dateItems[dayIndex]);
return formatedDate;
}
stringToDate("17/9/14","dd/MM/yyyy","/");
stringToDate("17/9/2014","dd/MM/yyyy","/");
stringToDate("9/17/2014","mm/dd/yyyy","/")
stringToDate("9-17-2014","mm-dd-yyyy","-")
Antwoord 18
Prestaties
Vandaag (2020.05.08) voer ik tests uit voor gekozen oplossingen – voor twee gevallen: invoerdatum is ISO8601-tekenreeks (Ad,Bd,Cd,Dd,Ed) en invoerdatum is tijdstempel(At, Ct, Dt). Oplossingen Bd,Cd,Ct retourneren js Date-object niet als resultaten, maar ik voeg ze toe omdat ze nuttig kunnen zijn, maar ik vergelijk ze niet met geldige oplossingen. Deze resultaten kunnen handig zijn voor het massaal ontleden van datums.
Conclusies
- Oplossing
new Date
(advertentie) is 50-100x sneller dan moment.js (Dd) voor alle browsers voor ISO-datum en tijdstempel - Oplossing
new Date
(ad) is ~ 10x sneller danparseDate
(ed) - Oplossing
Date.parse
(BD) is snelst als Wee tijdstempel moet krijgen van ISO-date in alle browsers
Details
Ik voer de test op MacOS High Sierra 10.13.6 op Chrome 81.0, Safari 13.1, Firefox 75.0. Oplossing parseDate
(ED) Gebruik new Date(0)
en stel handmatig UTC-datumcomponenten in.
Antwoord 19
Ik heb deze functie gemaakt om elk datumobject te converteren naar een UTC-datumobject.
function dateToUTC(date) {
return new Date(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate(), date.getUTCHours(), date.getUTCMinutes(), date.getUTCSeconds());
}
dateToUTC(new Date());
Antwoord 20
U kunt dit proberen:
function formatDate(userDOB) {
const dob = new Date(userDOB);
const monthNames = [
'January', 'February', 'March', 'April', 'May', 'June', 'July',
'August', 'September', 'October', 'November', 'December'
];
const day = dob.getDate();
const monthIndex = dob.getMonth();
const year = dob.getFullYear();
// return day + ' ' + monthNames[monthIndex] + ' ' + year;
return `${day} ${monthNames[monthIndex]} ${year}`;
}
console.log(formatDate('1982-08-10'));
Antwoord 21
Nog een andere manier om het te doen:
String.prototype.toDate = function(format) {
format = format || "dmy";
var separator = this.match(/[^0-9]/)[0];
var components = this.split(separator);
var day, month, year;
for (var key in format) {
var fmt_value = format[key];
var value = components[key];
switch (fmt_value) {
case "d":
day = parseInt(value);
break;
case "m":
month = parseInt(value)-1;
break;
case "y":
year = parseInt(value);
}
}
return new Date(year, month, day);
};
a = "3/2/2017";
console.log(a.toDate("dmy"));
// Date 2017-02-03T00:00:00.000Z
Antwoord 22
var date = new Date(year, month, day);
of
var date = new Date('01/01/1970');
datumtekenreeks in formaat ’01-01-1970′ werkt niet in FireFox, dus gebruik beter “/” in plaats van “-” in tekenreeks voor datumformaat.
Antwoord 23
Als u de inhoud van de tekenreeks moet controleren voordat u deze omzet naar de datumnotatie:
// Convert 'M/D/YY' to Date()
mdyToDate = function(mdy) {
var d = mdy.split(/[\/\-\.]/, 3);
if (d.length != 3) return null;
// Check if date is valid
var mon = parseInt(d[0]),
day = parseInt(d[1]),
year= parseInt(d[2]);
if (d[2].length == 2) year += 2000;
if (day <= 31 && mon <= 12 && year >= 2015)
return new Date(year, mon - 1, day);
return null;
}
Antwoord 24
Ik heb Parrsedatetime-functie gemaakt om het tekenreeks naar datum te converteren en het werkt in alle browser (inclusief IE-browser), controleer of iemand nodig heeft
https://github.com/umesh-markande/ Parse-string-to-date-in-all-browser
function parseDateTime(datetime) {
var monthNames = [
"January", "February", "March",
"April", "May", "June", "July",
"August", "September", "October",
"November", "December"
];
if(datetime.split(' ').length == 3){
var date = datetime.split(' ')[0];
var time = datetime.split(' ')[1].replace('.00','');
var timearray = time.split(':');
var hours = parseInt(time.split(':')[0]);
var format = datetime.split(' ')[2];
var bits = date.split(/\D/);
date = new Date(bits[0], --bits[1], bits[2]); /* if you change format of datetime which is passed to this function, you need to change bits e.x ( bits[0], bits[1], bits[2 ]) position as per date, months and year it represent bits array.*/
var day = date.getDate();
var monthIndex = date.getMonth();
var year = date.getFullYear();
if ((format === 'PM' || format === 'pm') && hours !== 12) {
hours += 12;
try{ time = hours+':'+timearray[1]+':'+timearray[2] }catch(e){ time = hours+':'+timearray[1] }
}
var formateddatetime = new Date(monthNames[monthIndex] + ' ' + day + ' ' + year + ' ' + time);
return formateddatetime;
}else if(datetime.split(' ').length == 2){
var date = datetime.split(' ')[0];
var time = datetime.split(' ')[1];
var bits = date.split(/\D/);
var datetimevalue = new Date(bits[0], --bits[1], bits[2]); /* if you change format of datetime which is passed to this function, you need to change bits e.x ( bits[0], bits[1], bits[2 ]) position as per date, months and year it represent bits array.*/
var day = datetimevalue.getDate();
var monthIndex = datetimevalue.getMonth();
var year = datetimevalue.getFullYear();
var formateddatetime = new Date(monthNames[monthIndex] + ' ' + day + ' ' + year + ' ' + time);
return formateddatetime;
}else if(datetime != ''){
var bits = datetime.split(/\D/);
var date = new Date(bits[0], --bits[1], bits[2]); /* if you change format of datetime which is passed to this function, you need to change bits e.x ( bits[0], bits[1], bits[2 ]) position as per date, months and year it represent bits array.*/
return date;
}
return datetime;
}
var date1 = '2018-05-14 05:04:22 AM'; // yyyy-mm-dd hh:mm:ss A
var date2 = '2018/05/14 05:04:22 AM'; // yyyy/mm/dd hh:mm:ss A
var date3 = '2018/05/04'; // yyyy/mm/dd
var date4 = '2018-05-04'; // yyyy-mm-dd
var date5 = '2018-05-14 15:04:22'; // yyyy-mm-dd HH:mm:ss
var date6 = '2018/05/14 14:04:22'; // yyyy/mm/dd HH:mm:ss
console.log(parseDateTime(date1))
console.log(parseDateTime(date2))
console.log(parseDateTime(date3))
console.log(parseDateTime(date4))
console.log(parseDateTime(date5))
console.log(parseDateTime(date6))
**Output---**
Mon May 14 2018 05:04:22 GMT+0530 (India Standard Time)
Mon May 14 2018 05:04:22 GMT+0530 (India Standard Time)
Fri May 04 2018 00:00:00 GMT+0530 (India Standard Time)
Fri May 04 2018 00:00:00 GMT+0530 (India Standard Time)
Mon May 14 2018 15:04:22 GMT+0530 (India Standard Time)
Mon May 14 2018 14:04:22 GMT+0530 (India Standard Time)
Antwoord 25
Je kunt regex gebruiken om de tekenreeks te ontleden om de tijd te detailleren en vervolgens een datum of een ander retourformaat maken zoals:
//example : let dateString = "2018-08-17 01:02:03.4"
function strToDate(dateString){
let reggie = /(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2}).(\d{1})/
, [,year, month, day, hours, minutes, seconds, miliseconds] = reggie.exec(dateString)
, dateObject = new Date(year, month-1, day, hours, minutes, seconds, miliseconds);
return dateObject;
}
alert(strToDate(dateString));
Antwoord 26
ISO 8601-achtige datumstrings, hoe uitstekend de standaard ook is, worden nog steeds niet breed ondersteund.
Dit is een geweldige bron om erachter te komen welk datumstringformaat je moet gebruiken:
http://dygraphs.com/date-formats.html
Ja, dat betekent dat je datestring zo simpel kan zijn als in tegenstelling tot
"2014/10/13 23:57:52"
in plaats van
"2014-10-13 23:57:52"
Antwoord 27
//little bit of code for Converting dates
var dat1 = document.getElementById('inputDate').value;
var date1 = new Date(dat1)//converts string to date object
alert(date1);
var dat2 = document.getElementById('inputFinishDate').value;
var date2 = new Date(dat2)
alert(date2);
Antwoord 28
gebruik deze code: (mijn probleem is opgelost met deze code)
function dateDiff(date1, date2){
var diff = {} // Initialisation du retour
var tmp = date2 - date1;
tmp = Math.floor(tmp/1000); // Nombre de secondes entre les 2 dates
diff.sec = tmp % 60; // Extraction du nombre de secondes
tmp = Math.floor((tmp-diff.sec)/60); // Nombre de minutes (partie entière)
diff.min = tmp % 60; // Extraction du nombre de minutes
tmp = Math.floor((tmp-diff.min)/60); // Nombre d'heures (entières)
diff.hour = tmp % 24; // Extraction du nombre d'heures
tmp = Math.floor((tmp-diff.hour)/24); // Nombre de jours restants
diff.day = tmp;
return diff;
}
Antwoord 29
Ik heb een herbruikbare functie geschreven die ik gebruik wanneer ik datumreeksen van de server ontvang.
u kunt het gewenste scheidingsteken ( / – etc..) doorgeven dat de dag, maand en jaar scheidt om de split()
-methode te gebruiken.
je kunt zien & test het op dit werkvoorbeeld.
<!DOCTYPE html>
<html>
<head>
<style>
</style>
</head>
<body>
<div>
<span>day:
</span>
<span id='day'>
</span>
</div>
<div>
<span>month:
</span>
<span id='month'>
</span>
</div>
<div>
<span>year:
</span>
<span id='year'>
</span>
</div>
<br/>
<input type="button" id="" value="convert" onClick="convert('/','28/10/1980')"/>
<span>28/10/1980
</span>
<script>
function convert(delimiter,dateString)
{
var splitted = dateString.split('/');
// create a new date from the splitted string
var myDate = new Date(splitted[2],splitted[1],splitted[0]);
// now you can access the Date and use its methods
document.getElementById('day').innerHTML = myDate.getDate();
document.getElementById('month').innerHTML = myDate.getMonth();
document.getElementById('year').innerHTML = myDate.getFullYear();
}
</script>
</body>
</html>
Antwoord 30
Nog een andere manier om dit te doen is door een regex te bouwen met benoemde capture-groepen over de format string en dan die regex te gebruiken om de dag, maand en jaar uit de date string te halen:
function parseDate(dateStr, format) {
const regex = format.toLocaleLowerCase()
.replace(/\bd+\b/, '(?<day>\\d+)')
.replace(/\bm+\b/, '(?<month>\\d+)')
.replace(/\by+\b/, '(?<year>\\d+)')
const parts = new RegExp(regex).exec(dateStr) || {};
const { year, month, day } = parts.groups || {};
return parts.length === 4 ? new Date(year, month-1, day) : undefined;
}
const printDate = x => console.log(x ? x.toLocaleDateString() : x);
printDate(parseDate('05/11/1896', 'dd/mm/YYYY'));
printDate(parseDate('07-12-2000', 'dd-mm-yy'));
printDate(parseDate('07:12:2000', 'dd:mm:yy'));
printDate(parseDate('2017/6/3', 'yy/MM/dd'));
printDate(parseDate('2017-6-15', 'y-m-d'));
printDate(parseDate('2015 6 25', 'y m d'));
printDate(parseDate('2015625', 'y m d')); // bad format