1
votes

Comment diviser une chaîne datetime en 2 morceaux

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


7 commentaires

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) et s.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 constructeur Date appelle Date.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 cas Date.parse ...


@jarmod, pour mon il est retourné 1519332169000, une seconde ... je l'ai fait de manière incorrecte


4 Réponses :


1
votes

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);


2 commentaires

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.



1
votes

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.


0 commentaires

0
votes

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!


0 commentaires

0
votes

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" ]


0 commentaires