Преобразование даты из Python в Javascript - PullRequest
29 голосов
/ 17 февраля 2011

Мне трудно работать с датами в 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?Что я делаю не так?

Ответы [ 3 ]

39 голосов
/ 17 февраля 2011

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

20 голосов
/ 23 января 2013

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 }});
12 голосов
/ 17 февраля 2011

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

new Date(1072944000.0 * 1000)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...