Comment puis-je convertir une chaîne en objet date-heure en javascript en spécifiant une chaîne de format?
Je cherche quelque chose comme:
var dateTime = convertToDateTime("23.11.2009 12:34:56", "dd.MM.yyyy HH:mm:ss");
Comment puis-je convertir une chaîne en objet date-heure en javascript en spécifiant une chaîne de format?
Je cherche quelque chose comme:
var dateTime = convertToDateTime("23.11.2009 12:34:56", "dd.MM.yyyy HH:mm:ss");
Réponses:
Je pense que cela peut vous aider: http://www.mattkruse.com/javascript/date/
Il y a une getDateFromFormat()
fonction que vous pouvez modifier un peu pour résoudre votre problème.
Mise à jour: une version mise à jour des exemples est disponible sur javascripttoolbox.com
TypeError: Object Date has no method 'getDateFromFormat'
Utilisez si votre chaîne est compatible avec . Si votre format est incompatible (je pense que c'est le cas), vous devez analyser la chaîne vous-même (cela devrait être facile avec des expressions régulières) et créer un nouvel objet Date avec des valeurs explicites pour l'année, le mois, la date, l'heure, la minute et la seconde.new Date(dateString)
Date.parse()
@Christoph mentionne l'utilisation d'une expression rationnelle pour résoudre le problème. Voici ce que j'utilise:
var dateString = "2010-08-09 01:02:03";
var reggie = /(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2})/;
var dateArray = reggie.exec(dateString);
var dateObject = new Date(
(+dateArray[1]),
(+dateArray[2])-1, // Careful, month starts at 0!
(+dateArray[3]),
(+dateArray[4]),
(+dateArray[5]),
(+dateArray[6])
);
Ce n'est en aucun cas intelligent, il suffit de configurer l'expression régulière et new Date(blah)
de l'adapter à vos besoins.
Edit: Peut-être un peu plus compréhensible dans ES6 en utilisant la déstructuration:
let dateString = "2010-08-09 01:02:03"
, reggie = /(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2})/
, [, year, month, day, hours, minutes, seconds] = reggie.exec(dateString)
, dateObject = new Date(year, month-1, day, hours, minutes, seconds);
Mais en toute honnêteté ces jours-ci, je cherche quelque chose comme Moment
/g
drapeau, pour ensemble lastIndex
à la 0
suite? N'utilisez simplement pas de correspondance globale.
/g
était un copier / coller bâclé d'un projet existant. lastindex
a été ajouté par un éditeur (pour combattre le \g
je suppose?). Je vais les supprimer maintenant. Merci d'avoir fait remarquer cela.
Il n'existe pas de routines de formatage de date / heure sophistiquées en JavaScript.
Vous devrez utiliser une bibliothèque externe pour la sortie de date formatée, "JavaScript Date Format" de Flagrant Badassery semble très prometteur.
Pour la conversion d'entrée, plusieurs suggestions ont déjà été faites. :)
Découvrez Moment.js . Il s'agit d'une bibliothèque moderne et puissante qui compense les mauvaises fonctions de date de JavaScript (ou leur absence).
Juste pour une réponse mise à jour ici, il y a une bonne lib js sur http://www.datejs.com/
Datejs est une bibliothèque de date JavaScript open source pour l'analyse, le formatage et le traitement.
var temp1 = "";
var temp2 = "";
var str1 = fd;
var str2 = td;
var dt1 = str1.substring(0,2);
var dt2 = str2.substring(0,2);
var mon1 = str1.substring(3,5);
var mon2 = str2.substring(3,5);
var yr1 = str1.substring(6,10);
var yr2 = str2.substring(6,10);
temp1 = mon1 + "/" + dt1 + "/" + yr1;
temp2 = mon2 + "/" + dt2 + "/" + yr2;
var cfd = Date.parse(temp1);
var ctd = Date.parse(temp2);
var date1 = new Date(cfd);
var date2 = new Date(ctd);
if(date1 > date2) {
alert("FROM DATE SHOULD BE MORE THAN TO DATE");
}
La bibliothèque externe est une exagération pour analyser une ou deux dates, j'ai donc fait ma propre fonction en utilisant les solutions d' Oli et de Christoph . Ici, en Europe centrale, nous utilisons rarement autre chose que le format OP, donc cela devrait suffire pour les applications simples utilisées ici.
function ParseDate(dateString) {
//dd.mm.yyyy, or dd.mm.yy
var dateArr = dateString.split(".");
if (dateArr.length == 1) {
return null; //wrong format
}
//parse time after the year - separated by space
var spacePos = dateArr[2].indexOf(" ");
if(spacePos > 1) {
var timeString = dateArr[2].substr(spacePos + 1);
var timeArr = timeString.split(":");
dateArr[2] = dateArr[2].substr(0, spacePos);
if (timeArr.length == 2) {
//minutes only
return new Date(parseInt(dateArr[2]), parseInt(dateArr[1]-1), parseInt(dateArr[0]), parseInt(timeArr[0]), parseInt(timeArr[1]));
} else {
//including seconds
return new Date(parseInt(dateArr[2]), parseInt(dateArr[1]-1), parseInt(dateArr[0]), parseInt(timeArr[0]), parseInt(timeArr[1]), parseInt(timeArr[2]))
}
} else {
//gotcha at months - January is at 0, not 1 as one would expect
return new Date(parseInt(dateArr[2]), parseInt(dateArr[1] - 1), parseInt(dateArr[0]));
}
}
Date.parse()
est assez intelligent mais je ne peux pas garantir que le format sera correctement analysé.
Si ce n'est pas le cas, vous devrez trouver quelque chose pour combler les deux. Votre exemple est assez simple (étant purement numérique), donc une touche de REGEX (ou même string.split()
- peut-être plus rapide) associée à certains parseInt()
vous permettra de faire rapidement une date.
time = "2017-01-18T17:02:09.000+05:30"
t = new Date(time)
hr = ("0" + t.getHours()).slice(-2);
min = ("0" + t.getMinutes()).slice(-2);
sec = ("0" + t.getSeconds()).slice(-2);
t.getFullYear()+"-"+t.getMonth()+1+"-"+t.getDate()+" "+hr+":"+min+":"+sec
Juste pour donner mes 5 cents.
Mon format de date est jj.mm.aaaa (format UK) et aucun des exemples ci-dessus ne fonctionnait pour moi. Tous les analyseurs considéraient mm comme jour et dd comme mois.
J'ai trouvé cette bibliothèque: http://joey.mazzarelli.com/2008/11/25/easy-date-parsing-with-javascript/ et cela a fonctionné, car vous pouvez dire l'ordre des champs comme ceci:
>>console.log(new Date(Date.fromString('09.05.2012', {order: 'DMY'})));
Wed May 09 2012 00:00:00 GMT+0300 (EEST)
J'espère que cela aide quelqu'un.
Moment.js gérera ceci:
var momentDate = moment('23.11.2009 12:34:56', 'DD.MM.YYYY HH:mm:ss');
var date = momentDate.;
Vous pouvez utiliser la bibliothèque moment.js pour cela. J'utilise uniquement pour obtenir une sortie spécifique au temps, mais vous pouvez sélectionner le type de format que vous souhaitez sélectionner.
Référence:
1. bibliothèque moment: https://momentjs.com/
2. fonctions spécifiques à l'heure et à la date: https://timestamp.online/article/how-to-convert-timestamp-to-datetime-in-javascript
convertDate(date) {
var momentDate = moment(date).format('hh : mm A');
return momentDate;
}
et vous pouvez appeler cette méthode comme:
this.convertDate('2020-05-01T10:31:18.837Z');
J'espère que ça aide. Profitez du codage.
Pour satisfaire pleinement la chaîne de conversion Date.parse au format jj-mm-AAAA comme spécifié dans la RFC822, si vous utilisez l'analyse aaaa-mm-jj, une erreur peut se produire.
//Here pdate is the string date time
var date1=GetDate(pdate);
function GetDate(a){
var dateString = a.substr(6);
var currentTime = new Date(parseInt(dateString ));
var month =("0"+ (currentTime.getMonth() + 1)).slice(-2);
var day =("0"+ currentTime.getDate()).slice(-2);
var year = currentTime.getFullYear();
var date = day + "/" + month + "/" + year;
return date;
}