Как преобразовать дату в формате "ГГГГ-ММ-ДД чч: мм: сс" в метку времени UNIX - PullRequest
8 голосов
/ 15 июля 2011

Как я могу преобразовать время в формате "ГГГГ-ММ-ДД чч: мм: сс" (например, "2011-07-15 13:18:52") в метку времени UNIX?

Я пробовал этот фрагмент кода Javascript:

date = new Date("2011-07-15").getTime() / 1000
alert(date)

И это работает, но это приводит к NaN, когда я добавляю время ('2011-07-15 13:18:52') к входу.

Ответы [ 5 ]

17 голосов
/ 15 июля 2011

Используйте конструктор длинной даты и укажите все компоненты даты / времени:

var match = '2011-07-15 13:18:52'.match(/^(\d+)-(\d+)-(\d+) (\d+)\:(\d+)\:(\d+)$/)
var date = new Date(match[1], match[2] - 1, match[3], match[4], match[5], match[6])
// ------------------------------------^^^
// month must be between 0 and 11, not 1 and 12
console.log(date);
console.log(date.getTime() / 1000);
14 голосов
/ 22 июля 2015

Следующий код будет работать для формата YYYY-MM-DD hh:mm:ss:

function parse(dateAsString) {
    return new Date(dateAsString.replace(/-/g, '/'))
}

Этот код преобразует YYYY-MM-DD hh:mm:ss в YYYY/MM/DD hh:mm:ss, который легко анализируется конструктором Date.

6 голосов
/ 15 июля 2011

Вы приняли ответ, но можно использовать более простое регулярное выражение:

function stringToDate(s)  {
  s = s.split(/[-: ]/);
  return new Date(s[0], s[1]-1, s[2], s[3], s[4], s[5]);
}

alert(stringToDate('2011-7-15 20:46:3'));

Конечно, входная строка должна иметь правильный формат.

1 голос
/ 15 июля 2011

Месяцы начинаются с 0, в отличие от дней!Так что это будет отлично работать ( проверено )

function dateToUnix(year, month, day, hour, minute, second) {
    return ((new Date(Date.UTC(year, month - 1, day, hour, minute, second))).getTime() / 1000.0);
}
0 голосов
/ 15 июля 2011

Возвращает количество миллисекунд с 1 января 1970 года: Date.parse('2011-07-15 10:05:20')

Просто поделите на 1000, чтобы получить секунды вместо миллисекунд.

...