2012-03-06 23 views

Trả lời

5

Tại sao không chỉ gửi ngày trong UTC, sau đó chuyển sang múi giờ của bạn trên máy chủ?

var utcEpochSeconds = dateObj.getTime() + (dateObj.getTimezoneOffset() * 60000); 
+0

Đến nay giải pháp tốt nhất vì máy địa phương không nhất thiết phải biết chênh lệch múi giờ của máy chủ. Vẫn không thể giải thích tại sao không có phương thức 'dateObj.getUTCTime()'. – RobG

+0

UTC luôn giống nhau, bất kể là gì? (i suck tại các công cụ múi giờ) – Tobias

+1

Có, trừ khi đồng hồ của bạn bị định cấu hình sai hoặc bạn đang di chuyển với tốc độ tương đối: http://en.wikipedia.org/wiki/Coordinated_Universal_Time – tjdett

0

Sử dụng toISOString để nhận dấu thời gian UTC.

var date = new Date(); 
date.toISOString(); // EST would be 6 hour diff from GMT 
+0

'toISOString()' là ES5 và chưa được hỗ trợ bởi một tỷ lệ phần trăm tốt các trình duyệt web đang sử dụng. Không khó để cạnh tranh với những người thiếu nó mặc dù. – RobG

+0

Không phải chỉ là IE cũ không hỗ trợ nó? : P Dù bằng cách nào, tạo ra một shim. – Trevor

1

Để điều này xảy ra, bạn cần phải áp dụng các múi giờ bù đắp cho thời điểm đó, và sau đó loại bỏ bù đắp của bạn từ giá trị (thử nghiệm này, tôi đoán từ bộ nhớ):

var now = new Date(), 
    offset = -(now.getTimezoneOffset() * 60 * 1000), // now in milliseconds 
    userUnixStamp = +now + offset; 

Bây giờ, hãy tự bù đắp cho riêng mình:

var now = new Date(), 
    offset = now.getTimezoneOffset() * 60 * 1000, 
    yourUnixStamp = userUnixStamp - offset; 
+0

bạn có thể bọc nó vào một ví dụ mà khách hàng không có vấn đề gì trả về cùng một dấu thời gian cho los angeles? gây ra tôi không thể quấn tâm trí của tôi xung quanh nó ngay bây giờ ... tôi tiếp tục nhận được kết quả khác nhau. * brainmelt – Tobias

+0

Bạn có thể giải thích tình huống thêm một chút không? Ngày đến từ đâu? Làm thế nào bạn nhận được nó? – Eli

+0

tôi cần phải giữ bất kỳ khách hàng múi giờ nào tại cùng một thời điểm của máy chủ - tôi đã đặt thời gian máy chủ thành UTC chỉ để làm cho nó dễ dàng hơn - bây giờ tôi đã cố gắng tạo thời gian UTC với điều này: var d = new Date(); var utc = Math.round (d.getTime() + (d.getTimezoneOffset() * 60000)/1000); nhưng nó luôn trả về một microtime (tại sao ?! có dấu/1000) dấu thời gian trước 8 giờ ... – Tobias