Python Unix时间在Javascript中失效

6 投票
4 回答
3672 浏览
提问于 2025-04-15 12:39

在Python中,使用calendar.timegm()函数,我得到一个10位数的Unix时间戳。当我把这个时间戳放入JavaScript的setTime()函数时,它显示的日期是1970年。这显然需要一个13位数的Unix时间戳。怎么会这样呢?它们是从同一个日期开始计算的吗?

我该如何在这两种语言之间使用相同的Unix时间戳呢?

在Python中:

In [60]: parseddate.utctimetuple()
Out[60]: (2009, 7, 17, 1, 21, 0, 4, 198, 0)
In [61]: calendar.timegm(parseddate.utctimetuple())
Out[61]: 1247793660

在Firebug中:

>>> var d = new Date(); d.setTime(1247793660); d.toUTCString()
"Thu, 15 Jan 1970 10:36:55 GMT"

4 个回答

2

你是不是把从1970年开始的秒数和从1970年开始的毫秒数搞混了?

9

这里有几个我用来在Python和JavaScript之间转换日期时间的方法。

def to_datetime(js_timestamp):
    return  datetime.datetime.fromtimestamp(js_timestamp/1000)

def js_timestamp_from_datetime(dt):
    return 1000 * time.mktime(dt.timetuple())

在JavaScript中,你可以这样做:

var dt = new Date();
dt.setTime(js_timestamp);
11

timegm 是基于 Unix 的 gmtime() 方法,这个方法返回的是从1970年1月1日开始的秒数。

而 JavaScript 的 setTime() 方法返回的是从那个日期开始的毫秒数。所以,如果你想把秒数转换成 JavaScript 需要的格式,就得把你的秒数乘以1000。

撰写回答