Как разделить строку datetime на 2 части

#javascript

#javascript

Вопрос:

У меня есть строка datetime, возвращающаяся как

«2018-02-22 3:42:49 вечера»

Я знаю, что могу разделить ее, используя метод split(» «), но он дает мне 3 отдельные части

2018-02-22, 3:42:49, PM

но мне это нужно как 2018-02-22, 3:42:49 вечера

Вероятно, я могу просто объединить последние 2, но это, вероятно, было бы грязно

Комментарии:

1. Найдите индекс первого пробела, возьмите подстроку до и после. Или, если вы можете гарантировать, что дата — ГГГГ-ММ-ДД, за которым следует пробел, тогда вы знаете расположение пробела. Или проанализируйте ее в объект datetime и используйте его для всего, что вам нужно.

2. Вы можете просто использовать s.substring(0, 10) и s.substring(11) , где s содержит строку datetime . Это работает, потому что длина части даты всегда одинакова.

3. @kol, это именно то, что я сделал

4. @jarmod, у вас есть пример того, о чем вы говорите, о его разборе, потому что я только что попробовал Date.parse, и это не сработало

5. @jarmod Проще просто new Date("2018-02-22 3:42:49 PM") , Date конструктор вызывает Date.parse неявно. Кроме того, предупреждение: Date.parse уже давно зависит от реализации, и в некоторых крайних случаях оно все еще может возвращать разные значения в разных браузерах…

Ответ №1:

Вот один из способов:

 //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);  
 <p id="justDate"></p>

<p id="justTime"></p>

<p id="dplust"></p>  

Комментарии:

1. Что делать, если час двузначный? Это может нарушить этот код!

2. Смотрите обновленный фрагмент. — Он проверяет длину строки в случае, если час является двузначным.

Ответ №2:

Вы можете использовать String.prototype.match() с регулярным выражением и String.prototype.slice(), тогда вы получите только 2 части

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

Причина .match() .split() , по которой в этом случае используется over, заключается в том, что with .match() вы можете использовать lookbehind . По-видимому, это не поддерживается .split() в javascript.

Ответ №3:

Я надеюсь, что это может вам помочь, поскольку я думаю об этом, вместо того, чтобы делать массив,

Может быть, вы просто идентифицируете пробел с индексом, а затем берете то, что хотите, из строки следующим образом:

     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
  

приятного просмотра!

Ответ №4:

что?

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