2016-02-16 30 views
1

我在JS以下時間戳: 當我進入這個日期在JS,我得到了以下結果:爲什麼Javascript的Date(timestamp)和Python的datetime.fromtimestamp(timestamp)有所不同?

日期(1436428916900) 「星期二2016年2月16日20時09分42秒GMT + 0200(EET)」

我發現SO,其中大部分提供了以下解決幾個問題:

import datetime 
my_time = 1436428916900 
date = datetime.datetime.fromtimestamp(my_time/1e3) 

但問題是,這個代碼導致以下結果:

datetime.datetime(2015, 7, 9, 11, 1, 56, 900000) 

這是JS代碼完全不同的結果。

來源:JavaScript timestamp to Python datetime conversion

How to convert integer timestamp to Python datetime

+1

Python爲該時間戳提供的日期是正確的,並且您在JavaScript中獲取的日期是錯誤的 - 您可以在http://www.unixtimestamp.com或使用* nix date實用程序確認此日期。什麼是你使用的確切的JavaScript代碼? – Ben

+0

你是說日期錯了嗎?或格式? – phenxd

+1

在JavaScript中嘗試'new Date(...)'而不是'Date(...)'。 –

回答

4

JavaScript函數Date()Date構造函數通過調用new Date(…)不同。該函數靜默地忽略任何參數,並返回代表當前時間的字符串,而不是新的實例。 (請參閱EcmaScript 2015 Specification以獲得進一步參考。)

因此,您應該在JavaScript中使用new Date(timestamp),並且您將在Python和JavaScript中獲得相同的結果。

JavaScript是一種相當特殊的語言。

+0

謝謝!沒想到問題出在JS代碼中。 –

+0

「*該函數只接受日期字符串... *」具有誤導性。它還接受時間值編號和諸如日期實例的對象(參見[* ECMA-262§20.3.2.2*](http://www.ecma-international.org/ecma-262/6.0/#sec-date-值))。 – RobG

+0

@RobG當你作爲一個函數被調用時,你鏈接的東西似乎是'Date'構造函數的文檔,而不是'Date()'的文檔。我不知道後者在標準中是如何記錄的(或者它是否被提及)。不過,我嘗試過使用Firefox,Chrome和NodeJS,並且他們都沒有'Date(timestamp)'以任何有意義的方式工作。它始終返回一個指向當前時間的日期字符串,而不考慮傳入的時間戳的值。唯一的引用是我鏈接的答案。 –