Преобразование даты из Python в Javascript

Мне трудно работать с датами в Python и Javascript.

>>> d = date(2004, 01, 01) >>> d datetime.date(2004, 1, 1) >>> time.mktime(d.timetuple()) 1072944000.0 

Затем в Javascript (данные, отправленные через Ajax):

 >>> new Date(1072944000.0) Tue Jan 13 1970 02:02:24 GMT-0800 (PST) {} 

Я смущен. Должна ли дата Javascript быть такой же, как та, которую я ввел в Python? Что я делаю не так?

Date() Javascript Date() принимает миллисекунды в качестве аргумента. Python использует секунды. Вы должны умножить на 1000.

Python:

 import datetime, time d = datetime.datetime.utcnow() for_js = int(time.mktime(d.timetuple())) * 1000 

Тогда в JS:

 new Date({{ for_js }}); 

В Flask вы можете делать:

 @app.template_filter('date_to_millis') def date_to_millis(d): """Converts a datetime object to the number of milliseconds since the unix epoch.""" return int(time.mktime(d.timetuple())) * 1000 

И затем выполните:

 new Date({{ current_user.created|date_to_millis }}); 

Python возвращает время с момента эпохи в секундах. Javascript занимает время в миллисекундах. Умножьте время на 1000, прежде чем передавать его в Date() и вы должны получить ожидаемый результат.

 new Date(1072944000.0 * 1000)