将日期从Python转换为Javascript

32 投票
3 回答
30525 浏览
提问于 2025-04-16 11:57

我在使用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 个回答

13

Python返回的是自纪元以来的时间,单位是秒。而JavaScript使用的是毫秒。你在把时间传给Date()之前,要把它乘以1000,这样就能得到你想要的结果。

new Date(1072944000.0 * 1000)
25

Python:

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

然后在JavaScript中:

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

JavaScript的Date()函数需要以毫秒为单位的时间作为参数,而Python则是以秒为单位的时间。所以如果你想在Python中使用JavaScript的时间,你需要把它乘以1000。

撰写回答