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ùscontient 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 constructeurDateappelleDate.parseimplicitement. Aussi, un mot d'avertissement:Date.parsea 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