2016-08-12 20 views
6

Có cách nào để lấy múi giờ địa phương từ hệ thống (ví dụ: - ubuntu) bằng cách sử dụng nodejs không?Cách lấy múi giờ địa phương từ hệ thống bằng cách sử dụng nodejs

Tôi đã sử dụng moment.js để trích xuất giá trị ngày và giờ. Nhưng không thể tìm ra cách để trích xuất múi giờ.

+4

hãy thử ngày mới này(). GetTimezoneOffset() '. – vkstack

+0

Cảm ơn. Nó đã làm việc. Nhưng tôi cần nó được định dạng trong "hh: mm"; vì vậy tôi đã sử dụng moment.js với 'console.log (''. concat (offset <0?" - ":" + ", thời điểm (''. concat (Math.abs (offset/60), Math.abs (offset % 60) <10? "0": "", Math.abs (offset% 60)), "hmm"). Định dạng ("HH: mm")); ' – Malith

Trả lời

-2

tôi giải quyết này bằng moment.js (http://momentjs.com/docs/)

var moment = require('moment'); 
var offset = moment().utcOffset(); 
console.log(''.concat(offset < 0 ? "-" : "+",moment(''.concat(Math.abs(offset/60),Math.abs(offset%60) < 10 ? "0" : "",Math.abs(offset%60)),"hmm").format("HH:mm"))); 

------ Edited --------

Tôi tìm thấy một giải pháp tốt hơn sử dụng moment.js. Chỉ cần sử dụng moment().format('Z')

mang đến cho đầu ra:

+05: 30

+1

bạn cũng có thể sử dụng định dạng' moment(). ('Z') 'để có được kết quả tương tự –

+0

Cảm ơn bạn !!: D Điều này làm cho mã rất nhỏ gọn – Malith

+2

Điều này mang lại cho bạn mức bù hiện tại trong múi giờ hiện tại nhưng điều này có thể thay đổi trong một phần của năm do thay đổi DST .Nếu nghi ngờ, luôn luôn sử dụng/lưu trữ ngày/giờ UTC cộng với định danh múi giờ và sau đó chuyển sang địa phương càng muộn càng tốt. Bằng cách này bạn có thể xử lý các thay đổi qua DST. Xem câu trả lời của tôi để biết thêm chi tiết. – Tim

3

Nó rất đơn giản.

var x = new Date(); 
var offset= -x.getTimezoneOffset(); 
console.log((offset>=0?"+":"-")+parseInt(offset/60)+":"+offset%60) 

Và không có gì khác là hoặc bạn có thể xem nếu momentJS có thể giúp bạn hay không.

+0

cái này đẹp nhưng nếu bù trừ âm bạn sẽ nhận được - 4: 0, bạn cũng nên thêm hàm đệm –

6

Câu trả lời hiện tại sẽ cho bạn biết bù trừ múi giờ hiện tại, nhưng bạn sẽ gặp vấn đề nếu bạn so sánh các điểm lịch sử/tương lai trong thời gian vì điều này sẽ không phục vụ cho các thay đổi tiết kiệm ánh sáng ban ngày.

Trong nhiều múi giờ, mức chênh lệch thay đổi trong suốt cả năm và những thay đổi này xảy ra vào các ngày khác nhau hoặc hoàn toàn không phụ thuộc vào vĩ độ. Nếu bạn chỉ có thời gian UTC và khoản bù trừ, bạn không bao giờ có thể chắc chắn khoản chênh lệch sẽ ở vị trí đó tại các thời điểm khác nhau trong năm.

Ví dụ: chênh lệch UTC + 2: 00 có thể tham khảo Barcelona vào mùa hè hoặc Bờ Biển Ngà quanh năm. Việc bù đắp 2hr sẽ luôn luôn hiển thị thời gian chính xác ở Bờ Biển Ngà nhưng sẽ được 1 giờ trong nửa năm ở Barcelona.

Làm thế nào để chúng tôi phục vụ cho tất cả các vấn đề múi giờ này? Vâng, đó là khá đơn giản:

  1. Lưu mọi thời điểm trong UTC
  2. Store tên múi giờ nơi này xảy ra

Trong JavaScript, bạn có thể sử dụng Moment múi giờ để guess the users timezone mặc dù tôi đã chỉ được thử nghiệm điều này trong trình duyệt:

moment.tz.guess(); // eg. 'America/Chicago' 

Sau đó, bạn có thể sử dụng chuỗi múi giờ này trong Moment Timezone để giúp bù đắp thời gian UTC đã chụp.

+0

Đây là câu trả lời đúng. Offsets và timezones có liên quan nhưng khác nhau, và có thể gây ra tàn phá nếu mã của bạn yêu cầu tiết kiệm ánh sáng ban ngày để được đưa vào tài khoản như đã đề cập. – Brideau

Các vấn đề liên quan