Python与JavaScript的Unix时间转换
在JavaScript中:
new Date(2014, 5, 1).getTime()
// results: 1401561000000
而在Python中:
import time
import datetime
time.mktime(datetime.datetime(2014, 5 , 1).timetuple())
# results -> 1398882600.0
我该如何把Python的时间转换成JavaScript的Unix时间戳呢?
2 个回答
1
JavaScript中的时间计算是从0开始算月份的。这意味着如果你想在JavaScript中表示四月,你输入的月份会是错误的。
要让你的JavaScript和Python中的月份表示一致,你可以这样做:
var time = new Date(2014, 4, 1).getTime()/1000;
// time = 1398916800
3
让我们来比较一下这两个结果:
- JavaScript:
1401561000
– 2014年5月31日 18:30:00 UTC(注意,getTime()
返回的是毫秒数,所以你需要把它除以1000) - Python:
1398882600
– 2014年4月30日 18:30:00 UTC
所以实际上有两个问题:
首先,在JavaScript中,月份的索引是从 0
开始的(0 = 一月),而在Python中是从 1
开始的(1 = 一月)。这就是为什么会有一个月的差距。
第二个问题是由于时区造成的。你的本地时间似乎是 UTC-05:30,这就是差距的来源。当你在任一语言中创建日期时,使用的总是本地时间,所以时区的偏差会被考虑进去。如果你想输入UTC时间,也可以做到。在JavaScript中,这很简单,因为有 Date.UTC
:
Date.UTC(2014, 5, 1) / 1000 // 1401580800
Date.UTC(2014, 4, 1) / 1000 // 1398902400
而在Python中,情况就复杂一些,因为 datetime
对象默认是不考虑时区的,但 time.mktime
假设传入的元组是本地时间。要解决这个问题,你可以通过明确指定时区来让 datetime
对象考虑时区,或者自己进行计算:
>>> datetime.datetime(2014, 6, 1, tzinfo=timezone.utc).timestamp()
1401580800.0
>>> datetime.datetime(2014, 5, 1, tzinfo=timezone.utc).timestamp()
1398902400.0
>>> (datetime.datetime(2014, 6, 1) - datetime.datetime(1970, 1, 1)) / datetime.timedelta(seconds=1)
1401580800.0
>>> (datetime.datetime(2014, 5, 1) - datetime.datetime(1970, 1, 1)) / datetime.timedelta(seconds=1)
1398902400.0