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


105

Як я можу конвертувати звичайну дату 2012.08.10в часову позначку unix у JavaScript?

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




Я бачив тут багато публікацій, які конвертують його в PHP, Ruby тощо ... Але мені потрібно це зробити всередині JS.



1
Ви пробували newDate.getTime () / 1000?
Gareth Parker

@LokiAstari так, вибачте. Я шукав, але не знайшов.
Stan

1
Можливо, я чогось пропускаю, але unix timestampце так важливо для всієї техніки та інформатики. Бажаю, щоб був вбудований зручний метод. В даний час я використовуюMath.floor((+new Date()) / 1000);
Mars Robertson

Відповіді:


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

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


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

Ви можете просто використовувати оператор unary +

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

http://xkr.us/articles/javascript/unary-add/ - дивіться під Датами.


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


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") вихід-> 1456959600000

Date.parse ("12.12.2015") вихід-> 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.