Подтвердить что ты не робот

Преобразование даты из 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? Что я делаю неправильно?

4b9b3361

Ответ 1

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

Ответ 2

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

Ответ 3

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

new Date(1072944000.0 * 1000)