J'ai une chaîne datetime qui revient comme
"2018-02-22 15:42:49"
Je sais que je peux le fractionner en utilisant la méthode de fractionnement (""), mais cela me donne 3 pièces séparées
2018-02-22, 15:42:49, PM
mais j'en ai besoin comme 2018-02-22, 15:42:49
Je peux probablement juste concanténer les 2 derniers mais ce serait probablement sale
4 Réponses :
Voici une façon:
<p id="justDate"></p> <p id="justTime"></p> <p id="dplust"></p>
//your date string var dt = "2018-02-22 3:42:49 PM"; //slice date by index var d = dt.slice(0,10); //slice time by index var t = dt.slice(11,21); //check if hour is double digits by checking length of dt string if (dt.length > 21) { t = dt.slice(11,22) } //add date and time with space inbetween var dplust = d + ' ' + t; //get p ids for example var justDate = document.getElementById("justDate"); var justTime = document.getElementById("justTime"); var dplustDiv = document.getElementById("dplust"); //set inner html of p for examples justDate.innerHTML = 'This is just date - ' + d; justTime.innerHTML = 'This is just time - ' + t; dplustDiv.innerHTML = 'This is date plus time - ' + dplust; console.log(d); console.log(t);
Et si l'heure était à deux chiffres? Cela peut casser ce code!
Voir l'extrait de code mis à jour. - Il vérifie la longueur de la chaîne dans le cas où l'heure est à deux chiffres.
Vous pouvez utiliser String.prototype.match () avec un regex et String.prototype.slice () alors vous n'obtenez que 2 pièces
let dateString = "2018-02-22 3:42:49 PM"; let dateParts = dateString.match(/^(\S+)\s(.*)/).slice(1); // slice(1) removes the first match as that is the full string which is not needed console.log('1: ', dateParts[0] + ', ' + dateParts[1]); // or because it's only two parts you can also use join console.log('2: ', dateParts.join(', ')); console.log('Array length: ' + dateParts.length, dateParts);
La raison pour laquelle utiliser .match()
sur .split()
dans ce cas est que, avec .match()
vous pouvez utiliser un lookbehind. Apparemment, ce n'est pas pris en charge avec .split()
en javascript.
J'espère que cela peut vous aider, depuis que j'y pense, au lieu de faire un tableau,
Peut-être que vous identifiez simplement l'espace avec un index, puis prenez ce que vous voulez de la chaîne comme ceci:
var DT = "2018-02-22 3:42:49 PM"; var SplitDateTime = DT.indexOf(" "); var eDate = DT.substring(0, SplitDateTime); // 2018-02-22 var eTime = DT.substring(SplitDateTime + 1); // 3:42:49 PM
ayez un bon!
cette ?
function transfDate(sDate) { let [yyyy,mm,dd,h,m,s,t] = sDate.match(/\d{1,4}|AM|PM/g) return [`${yyyy}-${mm}-${dd}`, `${h}:${m}:${s} ${t}`] } console.log( transfDate( '2018-02-22 3:42:49 PM') ) // return -> [ "2018-02-22", "3:42:49 PM" ]
Trouvez l'index du premier espace, prenez la sous-chaîne avant et après. Ou si vous pouvez garantir que la date est AAAA-MM-JJ suivie d'un espace, vous connaissez l'emplacement de l'espace. Ou analysez-le dans un objet datetime et utilisez-le pour tout ce dont vous avez besoin.
Vous pouvez simplement utiliser
s.substring(0, 10)
ets.substring(11)
, oùs
contient la chaîne datetime. Cela fonctionne car la longueur de la partie date est toujours la même.@kol, c'est exactement ce que j'ai fait
@jarmod, avez-vous un exemple de ce dont vous parlez de son analyse parce que je viens d'essayer Date.parse et que cela n'a pas fonctionné
Qu'est-ce qui n'a pas fonctionné avec
Date.parse()
? Il renvoie ms depuis le 1er janvier 1970. Vous pouvez l'utiliser pour créer un objet Date, par exemple:dt = new Date(Date.parse("2018-02-22 3:42:49 PM"))
.@jarmod Il est plus facile de simplement
new Date("2018-02-22 3:42:49 PM")
, le constructeurDate
appelleDate.parse
implicitement. Aussi, un mot d'avertissement:Date.parse
a longtemps été dépendante de l'implémentation, et il peut toujours renvoyer des valeurs différentes dans différents navigateurs dans certains casDate.parse
...@jarmod, pour mon il est retourné 1519332169000, une seconde ... je l'ai fait de manière incorrecte