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

107

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

Fiddle: http://jsfiddle.net/J2pWj/




Я видел здесь много сообщений, конвертирующих его в PHP, Ruby и т. Д. Но мне нужно сделать это внутри JS.

Стэн
источник
1
возможный дубликат даты преобразования в метку времени в javascript?
Мартин Йорк,
1
Вы пробовали newDate.getTime () / 1000?
Гарет Паркер,
@LokiAstari да, извините. Я искал, но не нашел.
Стэн
2
Может быть, я что-то упускаю, но unix timestampон настолько важен для инженерии и информатики. Хотелось бы, чтобы не было встроенного удобного метода. В настоящее время используюMath.floor((+new Date()) / 1000);
Марс Робертсон

Ответы:

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

Проверьте документацию JavaScript Date .

Fguillen
источник
1
Спасибо за страницу документации. Я сделал то, что хотел.
Стэн,
32
Math.floor или это не метка времени unix (она будет иметь десятичную дробь)
BT
@ fguillen, Mooseman, бегаю и проверяю этот код. Как только я конвертирую временную метку unix на сегодняшний день, она дает мне 2012.08.09 вместо 2012.08.10. Это почему..?
WP Learner
@ user2584538, см. мой ответ ниже. Вы должны удалить десятичные знаки.
theVinchi
1
Время @Mentor UNIX измеряется в секундах, а не в миллисекундах
Нику Сурду
60
parseInt((new Date('2012.08.10').getTime() / 1000).toFixed(0))

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

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

Винчи
источник
5
просто помните, что это возвращает строку, а не число.
Capaj,
3
Хороший момент, изменен ответ на перенос с помощью parseInt () для преобразования обратно в целое число.
theVinchi
11

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

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

var unixTimestamp = moment('2012.08.10', 'YYYY.MM.DD').unix();
Махус
источник
10

var d = '2016-01-01T00:00:00.000Z';
console.log(new Date(d).valueOf()); // returns the number of milliseconds since the epoch

КАРТИКЕЯН А.
источник
5

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

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

http://xkr.us/articles/javascript/unary-add/ - смотрите в разделе Даты.

гибрид9
источник
2
Просто хочу добавить здесь два комментария: унарный оператор сложения + не нужен, поскольку /он уже является математическим оператором. Кроме того, toFixedвозвращает строку, а не число, если тип важен ..
Laurens
3

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

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

Barmar
источник
3
var date = new Date('2012.08.10');
var unixTimeStamp = Math.floor(date.getTime() / 1000);

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

думитру
источник
2

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

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

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

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

Назар
источник
1
Чем этот ответ отличается от того, который дал Бармар 6 лет назад?
Козерог
1
var datestr = '2012.08.10';
var timestamp = (new Date(datestr.split(".").join("-")).getTime())/1000;
OptimusCrime
источник
1

После сравнения отметки времени с отметкой 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'
Дамодар Башьял
источник
0

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

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

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

Раджат
источник