繁体   English   中英

python函数返回javascript date.getTime()

[英]python function to return javascript date.getTime()

我正在尝试创建一个简单的python函数,它将返回与javascript new Date().getTime()方法相同的值。 至于写在这里 ,javascript中的getTime()方法返回从1/1/1970毫秒数

所以我只是编写了这个python函数:

def jsGetTime(dtime):
    diff = datetime.datetime(1970,1,1)
    return (dtime-diff).total_seconds()*1000

而参数dtime是一个python datetime对象。

但我得错了结果。 我的计算有什么问题?

我不得不在此指出的一件事是:如果您尝试同步客户端时间和服务器时间,则需要将服务器时间传递给客户端并将其用作偏移量。 否则,您总是会有点不同步,因为您的客户端/ Web浏览器将在具有自己的时钟的各种计算机上运行。 然而,在统一庄园中引用时间是一种常见的模式,使用历元毫秒来在客户端和服务器之间进行同步。

Python

import time, datetime

def now_milliseconds():
   return int(time.time() * 1000)

# reference time.time
# Return the current time in seconds since the Epoch.
# Fractions of a second may be present if the system clock provides them.
# Note: if your system clock provides fractions of a second you can end up 
# with results like: 1405821684785.2 
# our conversion to an int prevents this

def date_time_milliseconds(date_time_obj):
   return int(time.mktime(date_time_obj.timetuple()) * 1000)

# reference: time.mktime() will
# Convert a time tuple in local time to seconds since the Epoch.

mstimeone = now_milliseconds()

mstimetwo = date_time_milliseconds(datetime.datetime.utcnow())

# value of mstimeone
# 1405821684785
# value of mstimetwo
# 1405839684000

Javascript

d = new Date()
d.getTime()

有关javascript日期操作的更多参考,请参阅此帖子。

Javascript的日期不能像您期望的那样工作。 但是你的python代码是正确的。

根据时代上市 ,2010年1月1日的纪元时间应该是

1262304000

Python :(似乎是正确的)

>>> (datetime(2010,1,1) - datetime(1970,1,1)).total_seconds()
1262304000.0

Javascript(看似错误)

> new Date(2010,1,1).getTime()
1265011200000

要么

> new Date(2010,1,1).getTime()/1000
1265011200

这是因为Javascript日期没有按照您期望的方式创建日期。 首先,它在您当前的时区中创建日期,而不是UTC。 因此,javascript中的“获取当前时间”将是客户端时间,而python将返回utc时间。 另请注意,JS Date中存在一个错误,其中月份实际上是0而不是1。

> new Date(2010,1,1,0,0,0,0)
Date 2010-02-01T08:00:00.000Z

> new Date(2010,0,1,0,0,0,0)
Date 2010-01-01T08:00:00.000Z

Javascript可以从纪元时间创建日期:

> new Date(1262304000000)
Date 2010-01-01T00:00:00.000Z

哪个是对的。

或者,您可以使用以下JS函数来获得更准确的时间请注意,月份仍然从0开始,而不是1

> Date.UTC(2010,0,1)
1262304000000

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM