2015-10-17 4 views
1

У меня есть строка даты, как это,Улучшение опережения регулярного выражения

'2015-09-24T03:45:19-0700 +0530' 

Я извлекая дату и время, как показано ниже

match(/[0-9]+:+[0-9]+:[0-9]+(?=.*?-)/) // returns 03:45:19 
match(/[0-9]+-+[0-9]+-[0-9]+(?=.*?T)/) // returns 2015-09-24 

Есть ли способ улучшить выше регулярное выражение?

EDIT:

Когда я пытаюсь new Date('2015-09-24T03:45:19-0700 +0530') это говорит неверная дата, как это локализуется дату. То когда я попробовал Regex оценить другой подход. Теперь я обосновался с заменой "T" на " " и используя new Date. И он отлично работает.

+0

Почему так усложнять. Вы можете использовать [((\ d {2}:?) {3})] (https://regex101.com/r/cS8oZ5/1) и [(\ d {4} - (\ d {2} - ?) {2})] (https://regex101.com/r/cS8oZ5/2) – Tushar

+0

Он отлично выглядит для времени, если только это не единственное число в нем, например '' 2015-09-24T03: 5: 19 -0700 + 0530'' – Exception

+1

Как насчет этого [[az \] ((\ d {1,2}:?) {3})] (https://regex101.com/r/cS8oZ5/3) – Tushar

ответ

1

Regex - это излишество здесь. Вы можете использовать substr и split (Предполагая, что формат строки будет таким же)

  1. Удалить миллисекунды и часовой пояс из строки
  2. Split результирующая строка по T

var str = '2015-09-24T03:45:19-0700 +0530'; 
 

 
var arr = str.substr(0, str.lastIndexOf('-')).split('T'); 
 

 
var date = arr[0], 
 
    time = arr[1]; 
 

 
document.getElementById('output').innerHTML = 'Date = ' + date + ' <br />Time = ' + time;
<pre id="output"></pre>


EDIT

lastIndexOf не будет работать для отрицательных часовых поясов, напр. -530. В этом случае вы можете использовать регулярное выражение, которое будет соответствовать -, а затем четыре цифры, чтобы разделить строку.

var str = '2015-09-24T03:45:19-0700 -0530'; 
 

 
var arr = str.split(/-\d{4}/)[0].split('T'); 
 
var date = arr[0], 
 
    time = arr[1]; 
 

 
document.getElementById('output').innerHTML = 'Date = ' + date + ' <br />Time = ' + time;
<pre id="output"></pre>

+0

Хорошо, выполняет ли задание :) Может быть, мы сможем это улучшить, используя это ''2015-09-24T03: 45: 19-0700 + 0530'.split (/ [T -] /)'? – Exception

+0

Upvote для решения. – Exception

+0

@Exception Это разделит дату на год, месяц и день. Имеет дополнительные накладные расходы на присоединение к ним снова – Tushar

2

Вы можете разделить на пространстве, и использовать Date.parse() для получения желаемого результата:

yourDate = new Date(Date.parse('2015-09-24T03:45:19-0700 +0530'.split(' ')[0])) 

"T" правильно интерпретированы Date.parse().

Затем вы можете использовать любой из методов для даты.

+0

Он пропускает время, пожалуйста, посмотрите на мое редактирование – Exception

+0

Upvote для решения. – Exception

Смежные вопросы