【问题标题】:Python Unix time doesn't work in JavascriptPython Unix 时间在 Javascript 中不起作用
【发布时间】:2009-07-03 00:55:59
【问题描述】:

在 Python 中,使用 calendar.timegm(),我得到一个 10 位的 unix 时间戳结果。当我将它放入 Javscript 的 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"

【问题讨论】:

标签: javascript python datetime utc unix-timestamp


【解决方案1】:

timegm 基于 Unix 的 gmtime() 方法,它返回自 1970 年 1 月 1 日以来的秒数。

Javascripts setTime() 方法是自该日期以来的毫秒数。您需要将秒数乘以 1000 才能转换为 Javascript 预期的格式。

【讨论】:

    【解决方案2】:

    以下是我用来与 javascript/datetime 相互转换的几个 python 方法。

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

    【讨论】:

      【解决方案3】:

      您是否可能将 seconds-since-1970 与毫秒-since-1970 混淆?

      【讨论】:

        【解决方案4】:

        JavaScript Date constructor 以毫秒为单位,您应该将 Python Unix 时间乘以 1000。

        var unixTimestampSeg = 1247793660;
        var date = new Date(unixTimestampSeg*1000);
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-04-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-12-20
          相关资源
          最近更新 更多