2009-07-03 33 views
6

Trong Python, sử dụng calendar.timegm(), tôi nhận được kết quả 10 chữ số cho dấu thời gian unix. Khi tôi đặt nó vào hàm setTime() của Javscript, nó xuất hiện vào một ngày vào năm 1970. Rõ ràng nó cần một dấu thời gian unix dài 13 chữ số. Làm thế nào điều này có thể xảy ra? Cả hai đều tính từ cùng một ngày?Thời gian Unix của Python không hoạt động trong Javascript

Làm cách nào để sử dụng cùng một dấu thời gian giữa hai ngôn ngữ này?

Trong 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 

Trong Firebug:

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

Có một lý do bạn không đi qua những ngày tháng trong một định dạng bên cạnh UTC (http://en.wikipedia.org/wiki/Coordinated_Universal_Time) ? – SingleNegationElimination

Trả lời

11

timegm được dựa trên phương pháp gmtime() Unix, mà trở lại giây kể từ 01 tháng 1, 1970.

Javascripts setTime() phương pháp là mili giây kể từ ngày đó. Bạn sẽ cần nhân số giây của mình gấp 1000 lần để chuyển đổi thành định dạng được mong đợi bằng Javascript.

2

Bạn có thể trộn lên giây-từ-1970 với mili giây-từ-1970?

1

Javascript Date constructor làm việc với mili giây, bạn nên nhân lần Python unix bởi 1000.

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

Dưới đây là một vài phương pháp python tôi sử dụng để chuyển đổi sang và từ javascript/datetime.

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

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

Trong javascript bạn sẽ làm gì:

var dt = new Date(); 
dt.setTime(js_timestamp); 
Các vấn đề liên quan