Преобразование обычной даты в метку времени unix

Как я могу преобразовать обычную дату 2012.08.10 в метку времени unix в javascript?

Сценарий: http://jsfiddle.net/J2pWj/




Я видел здесь много постов, в которых он конвертируется в PHP, Ruby и т. д. Но мне нужно сделать это внутри JS.


person Stan    schedule 09.08.2012    source источник
comment
возможный дубликат преобразовать дату в метку времени в javascript?   -  person Martin York    schedule 10.08.2012
comment
Вы пробовали newDate.getTime () / 1000?   -  person Gareth Parker    schedule 10.08.2012
comment
@LokiAstari да, извините. Я искал, но не нашел.   -  person Stan    schedule 10.08.2012
comment
Может быть, я что-то упускаю, но unix timestamp имеет фундаментальное значение для всей инженерии и информатики. Хотелось бы, чтобы не было встроенного удобного метода. В настоящее время я использую Math.floor((+new Date()) / 1000);   -  person Mars Robertson    schedule 07.05.2019


Ответы (9)


new Date('2012.08.10').getTime() / 1000

См. документацию по датам JavaScript.

person fguillen    schedule 09.08.2012
comment
Math.floor или это не временная метка unix (у нее будет десятичная дробь) - person B T; 18.06.2014
comment
@ fguillen, Mooseman, я бегаю и проверяю этот код. Как только я конвертирую временную метку unix на сегодняшний день, она дает мне 2012.08.09 вместо 2012.08.10. Это почему..? - person WP Learner; 17.12.2015
comment
@ user2584538, см. мой ответ ниже. Вы должны удалить десятичные знаки. - person theVinchi; 15.02.2016
comment
Почему Date.parse дает неверные результаты ?: stackoverflow.com/a/2587398/2714931 - person WeizhongTu; 31.10.2016
comment
Что-то изменилось после этого ответа? .getTime() возвращает временные метки UNIX на момент написания этого ... - person Mentor; 08.04.2019
comment
@Mentor UNIX время измеряется в секундах, а не в миллисекундах. - person Nicu Surdu; 22.07.2019
comment
почему вы разделили результат на 1000? потому что getTime даст вам в мс - person Shahin Ghasemi; 14.03.2020

parseInt((new Date('2012.08.10').getTime() / 1000).toFixed(0))

Важно добавить toFixed(0), чтобы удалить десятичные дроби при делении на 1000 для преобразования миллисекунд в секунды.

Функция .getTime() возвращает отметку времени в миллисекундах, но истинные отметки времени unix всегда находятся в секундах.

person theVinchi    schedule 23.02.2015
comment
только имейте в виду, что это возвращает строку, а не число. - person Capaj; 24.08.2016
comment
Хороший момент, изменен ответ на перенос с помощью parseInt () для преобразования обратно в целое число. - person theVinchi; 20.10.2016
comment
Если производительность имеет значение, вероятно, лучшим и более правильным вариантом будет Math.round или Math.floor, а не преобразование в строку, а затем обратно в целое число, то есть: Math.round(new Date('2012.08.10').getTime() / 1000) - person mindplay.dk; 15.06.2021

Вам следует ознакомиться с api moment.js, он очень прост в использовании и имеет множество встроенных функций.

Я думаю, что для вашей проблемы вы можете использовать что-то вроде этого:

var unixTimestamp = moment('2012.08.10', 'YYYY.MM.DD').unix();
person Mahus    schedule 10.02.2016

Вы можете просто использовать унарный оператор +

(+new Date('2012.08.10')/1000).toFixed(0);

http://xkr.us/articles/javascript/unary-add/ - посмотрите под датами.

person hybrid9    schedule 04.09.2015
comment
Просто хочу добавить здесь два комментария: унарный оператор сложения + не нужен, поскольку / уже является математическим оператором. Кроме того, toFixed возвращает строку, а не число, если тип важен. - person Laurens; 06.06.2019

var date = new Date('2012.08.10');
var unixTimeStamp = Math.floor(date.getTime() / 1000);

В этом случае важно возвращать только целое число (поэтому простое деление не подходит), а также возвращать только фактически прошедшие секунды (поэтому в этом коде используется Math.floor(), а не Math.round()).

person dumitru    schedule 20.07.2018

Вы можете использовать Date.parse (), но принимаемые форматы ввода зависят от реализации. Однако если вы можете преобразовать дату в формат ISO (ГГГГ-ММ-ДД), большинство реализаций должны это понимать.

См. Почему Date.parse дает неверные результаты?.

person Barmar    schedule 09.08.2012

Вы можете сделать это с помощью метода Date.parse ().

Date.parse($("#yourCustomDate).val())

Date.parse ("03.03.2016") output-> 1456959600000

Date.parse ("2015-12-12") output-> 1449878400000

person Nazar    schedule 04.07.2018
comment
Чем этот ответ отличается от ответа, данного Бармаром 6 лет назад? - person Capricorn; 04.07.2018

После сравнения отметки времени с отметкой PHP, ни одно из вышеперечисленных не кажется правильным для моего часового пояса. Приведенный ниже код дал мне тот же результат, что и PHP, что является наиболее важным для проекта, над которым я работаю.

function getTimeStamp(input) {
    var parts = input.trim().split(' ');
    var date = parts[0].split('-');
	var time = (parts[1] ? parts[1] : '00:00:00').split(':');

	// NOTE:: Month: 0 = January - 11 = December.
	var d = new Date(date[0],date[1]-1,date[2],time[0],time[1],time[2]);
	return d.getTime() / 1000;
}

// USAGE::
var start = getTimeStamp('2017-08-10');
var end = getTimeStamp('2017-08-10 23:59:59');

console.log(start + ' - ' + end);

Я использую это на NodeJS, и у нас есть часовой пояс «Австралия / Сидней». Итак, мне пришлось добавить это в файл .env:

TZ = 'Australia/Sydney'

Выше эквивалентно:

process.env.TZ = 'Australia/Sydney'
person Damodar Bashyal    schedule 26.09.2017

преобразовать метку времени в метку времени unix.

const date = 1513787412; const unixDate = new Date(date * 1000);// Dec 20 2020 (object)

чтобы получить отметку времени после преобразования const TimeStamp = new Date(date*1000).getTime(); //1513787412000

person Rajat    schedule 01.04.2020