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