Lấy múi giờ của khách hàng (và độ lệch) trong JavaScript – javascript lấy múi giờ địa phương

Bạn đang xem : javascript lấy múi giờ địa phương

Câu hỏi này đã có hơn 30 câu trả lời, nhưng tôi chắc chắn rằng có những người sẽ đến đây và thực sự thì không biết những gì họ đang tìm kiếm.

Thật bất ngờ! bạn sắp mở một hộp sâu!

Tôi thực sự khuyên bạn nên đọc bài viết này mà tôi đã viết gần đây về những vấn đề đau đầu khi xử lý TimeZones trong JS! https://medium.com/@EyeDin/time-and-time-zone-headaches-in-javascript-ae4d873a665d

CHÍNH XÁC bạn đang tìm kiếm điều gì?

Tùy thuộc vào trường hợp sử dụng thực sự của bạn, bạn thực sự cần những thứ khác nhau.

1) Một cách để chuyển đổi một thời điểm cố định (chẳng hạn như ngày 13 tháng 11 năm 2021 lúc 11:35:21 chiều ở San Francisco) thành thời gian trên đồng hồ treo tường của người dùng, người có thể ở bất kỳ đâu trên thế giới.

Sử dụng . toLocaleString () .

Nó có nhiều thông số tùy chỉnh để định dạng hơn bạn có thể nghĩ, thông qua hai thông số locale tùy chọn được liệt kê tại DateTimeFormat < / span>. Nó thậm chí còn hỗ trợ các lịch, ngôn ngữ, cách định dạng năm, tháng, ngày, v.v. khác nhau (không có tham số nào được chuyển sẽ sử dụng cài đặt mặc định của người dùng, điều này có thể là lý tưởng.)

Với tư cách là nhà phát triển, chỉ cần chuyển giá trị tại thời điểm đó (ví dụ: thời gian mở của sự kiện Bán hàng hoặc cuộc thi) dưới dạng số dấu thời gian UNIX (đó là số giây từ 1/1 / 1970 theo UTC, timezone-agnostic và DST0agnostic) cho ứng dụng khách, và sau đó thực hiện new Date (timestamp) .toLocaleString () . ví dụ. cho thời điểm đó ở trên, giá trị là 1636875321000 (tính bằng mili giây), qua + dateWithTimeZone ("America / Los_Angeles", 2021,10,13,23,35,21) bằng cách sử dụng hàm từ câu trả lời này .

2) Có thể gửi cho người dùng thông báo / email vào lúc 9 giờ sáng theo giờ địa phương của họ, 3 tháng kể từ bây giờ

Đây là một yêu cầu hoàn toàn khác! Giống như, rất khác!

GMT-8: 00 chưa đủ?

Không!

Đó chỉ là múi giờ mà người dùng đang ở tại một thời điểm, chẳng hạn như “ngay bây giờ, hôm nay” .

  • Làm thế nào bạn biết được liệu người dùng có Tiết kiệm ánh sáng ban ngày hay không? (Arizona ở Hoa Kỳ thì không, và rất nhiều quốc gia và tiểu bang khác, và thậm chí là các quận!)
  • Làm thế nào bạn biết được người dùng đang ở trong DST hay không ở trong DST? Đó là mùa đông ở San Francisco (GMT-8) hay mùa hè ở Alaska (một lần nữa, GMT-8). Xem danh sách khổng lồ này để kinh ngạc: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones

“PDT” không đủ cho điều đó?

Không!

Trước hết, PDT thậm chí không phải là thứ diễn ra quanh năm. Bây giờ là tháng 11 và timeanddate.com cho biết Hiện không có vị trí nào trên PDT. Bạn có muốn xem PST không? ” (đọc bài viết trên Phương tiện của tôi ở trên để biết thêm chi tiết.)

Trừ khi bạn đang sử dụng chuỗi giao diện người dùng mỹ phẩm từ khách hàng đến khách hàng, PDT / CEST / v.v. này. không có giá trị gì cả!

Tại sao? Bởi vì Tijuana ở Mexico và San Francisco ở Hoa Kỳ đều sử dụng PDT trong tháng 6, nhưng họ có các ngày DST (Tiết kiệm ánh sáng ban ngày) khác nhau nên họ chuyển sang PST. Và bạn cần biết điều đó!

Các ngày DST của Hoa Kỳ trong năm 2022 là 13 tháng 3 năm 2022 đến ngày 6 tháng 11 năm 2022 . Các ngày DST của Mexico vào năm 2022 là ngày 3 tháng 4 năm 2022 đến ngày 30 tháng 10 năm 2022 . Vì vậy, trong khi Tijuana và San Francisco đang chia sẻ thứ “PDT / PST” đó trong gần 93% số ngày, trong 7% số ngày (ví dụ: 14 tháng 3 đến 3 tháng 4 và 31 tháng 10 cho đến 6 tháng 11 năm 2022), họ không không khớp.

Vì vậy, ngay cả khi bạn biết đó là tháng 11 và bạn biết người dùng đang sử dụng PDT, bạn không thể biết khi nào (số dấu thời gian) sẽ là 9 giờ sáng ngày 1 tháng 4 năm 2022 trên thiết bị của người dùng.

Tái bút. Tệ hơn nếu bạn đang cố lấy PDT đó từ new Date (). ToString () . FYI, nếu bạn thay đổi ngôn ngữ của máy tính thành es-MX (Tiếng Tây Ban Nha, đó là ngôn ngữ của 13% dân số Hoa Kỳ), đây là những gì bạn nhận được: < / p>

  & gt; new Date (). toString ()
'Chủ nhật ngày 14 tháng 11 năm 2021 00:47:25 GMT-0800 (hora estándar del Pacífico)'
 

Chúc may mắn với hedP !

Sau đó, tôi nên làm gì?

CÁCH ĐÚNG DUY NHẤT là sử dụng giá trị Múi giờ IANA (đọc là “chuẩn”). Đó là cột thứ hai của trang Wikipedia này . Nó đến từ:

  const timeZoneIANA = Intl.DateTimeFormat (). ResolutionOptions (). timeZone;
 

Nó trả về giá trị IANA, là America / Los_Angeles cho San Francisco. Đây là giá trị bạn nên lưu trữ trong DB của mình cho người dùng, nếu có. Bạn có thể nhận được tất cả các loại thông tin về nó tại gói timezones.json và chuyển đổi thời gian từ / sang múi giờ đó, cộng với ngày (quan trọng) như này câu trả lời .

Còn IE11 thì sao?

IE11 không hỗ trợ thứ Intl .... đó. Hầu hết các polyfills chỉ là phỏng đoán và không chính xác. Vì vậy, hãy cố gắng ngừng hỗ trợ cho IE11 hoặc sử dụng thư viện và chuẩn bị tinh thần cho một số lỗi không chính xác.

3) Tôi chỉ muốn tìm hiểu chênh lệch múi giờ của họ vào lúc này (ví dụ: -8: 00)

Bạn có thể không nên. Tôi không thể nghĩ ra bất kỳ lý do thực sự nào mà bạn cần điều này. Một lần nữa, việc biết giá trị này cho ngày hôm nay, không cho bạn biết giá trị này ngay cả ngày mai.

Dù sao đi nữa, bạn luôn có thể nhận được giá trị đó bằng

  new Date (). getTimezoneOffset () / 60
 

ở phía khách hàng.

LƯU Ý: . getTimezoneOffset () KHÔNG phải độ lệch múi giờ của đối tượng ngày, bạn đang gọi nó. Vui lòng đọc tài liệu.

Để chính xác, cần sử dụng đối tượng Ngày đã qua (có dấu thời gian, tham chiếu đến một thời điểm duy nhất trong lịch sử), sau đó cho biết sự khác biệt giữa giờ UTC và giờ địa phương tại điểm -thời gian.

Một lần nữa, nó phụ thuộc vào ngày. Xem:

  console.log (new Date ("6/13/2021"). getTimezoneOffset () / 60); // Đó là 7 trên một máy chạy ở San Francisco
console.log (new Date ("13/11/2021"). getTimezoneOffset () / 60); // Đó là 8 trên một máy chạy ở San Francisco
 

Có thư viện nào không?

Đây là danh sách các thư viện hỗ trợ trao đổi múi giờ.

Tuy nhiên, hãy nhớ rằng, bạn phải giải quyết vấn đề thiết kế trước, sau đó tìm kiếm mã. Mọi thứ xung quanh múi giờ có thể dễ dàng trở nên phức tạp và bạn phải biết “PDT” và “GMT-8” KHÔNG phải là giá trị múi giờ có giá trị / thông tin quanh năm để lưu trữ trong DB cho người dùng. 🙂


Xem thêm những thông tin liên quan đến chủ đề javascript lấy múi giờ địa phương

JavaScript 34: Định dạng thời gian

  • Tác giả: thân triệu
  • Ngày đăng: 2019-06-01
  • Đánh giá: 4 ⭐ ( 5964 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Hướng dẫn học lập trình JavaScript cơ bản đến nâng cao. Định dạng thời gian trong JavaScript. Học lập trình miễn phí cho tất cả mọi người. thân triệu channel-let’s grow together!

Thời gian hiện tại địa phương trong năm Trung Hoa và thời tiết trong năm Trung Hoa

  • Tác giả: vi.thetimenow.com
  • Đánh giá: 3 ⭐ ( 3040 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Thời gian hiện tại tại địa phương Trung Hoa. Nhận bản đồ, thông tin du lịch, Trung Hoa Múi giờ và .

Làm cách nào để lấy ngày và giờ hiện tại theo UTC hoặc GMT trong Java? – Vương Quốc Đồ Ngủ

  • Tác giả: vuongquocdongu.com
  • Đánh giá: 4 ⭐ ( 9494 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Bạn đang xem: Làm cách nào để lấy ngày và giờ hiện tại theo UTC hoặc GMT trong Java? Table of Contents Túi hàng ngày giá cả phải chăng với giá từ 100

Cách lấy ngày giờ hiện tại trong Javascript

  • Tác giả: freetuts.net
  • Đánh giá: 4 ⭐ ( 7740 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Cách lấy này hiện trại trong javascript: Để lấy ngày tháng năm hiện tại và giờ phút giây hiện tại trong javascript thì ta sử dụng đối tượng date và cách hàm

Ngày giờ trong JavaScript

  • Tác giả: hanoiict.edu.vn
  • Đánh giá: 5 ⭐ ( 2848 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Trong hướng dẫn tự học Lập trình JavaScript này, bạn sẽ học cách làm việc với ngày và giờ trong JavaScript (Date time) với các ví dụ chi tiết, cụ thể.

current Date Time bằng JavaScript

  • Tác giả: blog.hostvn.net
  • Đánh giá: 5 ⭐ ( 3008 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Lấy ngày giờ hiện tại bằng JavaScript. Date Object trong JavaScript rất hữu ích để kiểm tra ngày và thời gian khách truy cập đến trang web của bạn

Làm cách nào để lấy tên múi giờ trong JavaScript?

  • Tác giả: qastack.vn
  • Đánh giá: 3 ⭐ ( 3370 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: [Tìm thấy giải pháp!] Các Quốc tế hóa API hỗ trợ nhận được múi giờ sử dụng, và được hỗ…

Xem thêm các bài viết khác thuộc chuyên mục: Kiến thức lập trình

Xem Thêm  Cách tính toán sự khác biệt giữa hai ngày giờ trong T-SQL - tính toán chênh lệch thời gian bằng sql