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


107

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

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




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



1
Вы пробовали newDate.getTime () / 1000?
Гарет Паркер,

@LokiAstari да, извините. Я искал, но не нашел.
Стэн

2
Может быть, я что-то упускаю, но unix timestampон настолько важен для инженерии и информатики. Хотелось бы, чтобы не было встроенного удобного метода. В настоящее время используюMath.floor((+new Date()) / 1000);
Марс Робертсон

Ответы:


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

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


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();


5

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

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

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


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


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

После сравнения отметки времени с отметкой 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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.