Как преобразовать дату в формате "гггг-ММ-ДД чч: мм: СС" в метку времени UNIX
как сконвертировать время в формате "гггг-ММ-ДД чч: мм: СС" (например "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 ответов
используйте конструктор long date и укажите все компоненты date/time:
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);
следующий код будет работать для format YYYY-MM-DD hh:mm:ss
:
function parse(dateAsString) {
return new Date(dateAsString.replace(/-/g, '/'))
}
этот код преобразует YYYY-MM-DD hh:mm:ss
to YYYY/MM/DD hh:mm:ss
это легко разбирается Date
конструктор.
вы приняли ответ, но можно использовать гораздо более простое регулярное выражение:
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'));
конечно, входная строка должна иметь правильный формат.
месяцы начинаются с 0, в отличие от дней! Так что это будет работать отлично (проверен)
function dateToUnix(year, month, day, hour, minute, second) {
return ((new Date(Date.UTC(year, month - 1, day, hour, minute, second))).getTime() / 1000.0);
}
Это возвращает количество миллисекунд с января. 1-е 1970:
Date.parse('2011-07-15 10:05:20')
просто разделить на 1000, чтобы получить секунды вместо миллисекунд..