01/10/2018, 00:41

Set thời gian tự động thay đổi theo múi giờ trên trình duyệt

Chào mọi người, mình đang làm 1 web trong đó mình hiển thị các khung thời gian (như kiểu thời gian biểu vậy). Ví dụ: 08:00 - 09:00 -10:00 … tuy nhiên thời gian này là tính theo giờ Việt Nam trong khi đối tượng sử dụng lại đến từ nhiều nước nhiều múi giờ khác nhau, nên mình muốn có thể set các khung thời gian kia tự động điều chỉnh theo từng múi giờ mà người dùng đang truy cập. Ví dụ cái 8h việt nam thì khi truy cập từ US thì sẽ tự trừ đi 12 tiếng, kiểu thế.
Mình hy vọng một giải pháp bằng javascript, jquery, mình xin cảm ơn.

Thành Phạm viết 02:55 ngày 01/10/2018

Thì check ip xem là gì rồi so sánh với range ip để xem thuộc vị trí nào => múi giờ.

Mà nếu không muốn làm phần đó thì dùng dịch vụ có sẵn đi.

https://api.sypexgeo.net/json/47.67.10.182

cái này từ ip ra được múi giờ luôn, đỡ phải xử lí lằng nhằng

Phạm Tuấn Cường viết 02:43 ngày 01/10/2018

Cool man, công nhận là mình không nghĩ đến có thể get IP bằng jquery

Thành Phạm viết 02:41 ngày 01/10/2018

làm bằng jquery hay js(client-side) để tạo request thì hay bị cái cross origin :V tốt nhất cho về backend xong làm thì hay hơn :V

anon52681320 viết 02:42 ngày 01/10/2018

khi sử dụng new Date() trên javascript. Sử dụng trên nền linux:

  • Chrome sẽ trả về timezone của client: Mon Nov 07 2016 12:26:34 GMT+0700 (ICT)
    => 0700 có nghĩa là đang ở mùi giờ +7 so với UTC. Khi dữ liệu đổ về sẽ convert giờ VN sang UTC, rồi lại +/- theo timezone của múi giờ client.
  • Firefox sẽ trả về giờ UTC: Date 2016-11-07T05:28:23.769Z
    => sẽ đỡ hơn 1 step convert lại sang UTC.
  • Safari => chưa test nhưng cách làm cũng sẽ tương tự.

Tuyệt đối đừng dựa vào IP, sẽ có rất nhiều vấn đề ad-hoc xảy ra như proxy, ip không được detect trong database của link trên, service của nó down…

Phạm Tuấn Cường viết 02:52 ngày 01/10/2018

Mình cũng build theo object Date, và hy vọng nó cũng sẽ tự động chuyển múi giờ như vậy nhưng hình như không được.
Vì cái mình cần chỉ là cái giờ và phút mà date thì nó bao gồm cả Date + time và nó cũng chỉ tự convert Date.now() thì phải
Ví dụ mình viết

var newDate = new Date(‘07/11/2016 08:00’’);
var hour = (‘0’ + newDate.getHours()).slice(-2);
var minute = (‘0’ + newDate.getMinutes()).slice(-2);

để lấy cái string ‘08:00’, thì liệu trên máy client có thể convert được không, phần này mình để ở front-end chứ không phải ở database

anon52681320 viết 02:46 ngày 01/10/2018

hy vọng nó cũng sẽ tự động chuyển múi giờ

Khi truyền vào new Date(‘07/11/2016 08:00’’), máy tính nó sẽ hiểu là set thời gian đó vào biến newDate(), tuy nhiên nó sẽ không tính toán lại thời gian theo timezone của client đâu. Bởi vì điều đơn giản là đâu có truyền vào ??
Nếu muốn có thể làm cách nhanh hơn: new Date(‘Mon Nov 07 2016 12:26:34 GMT-0500’);
=> kết quả trả về sẽ là Tue Nov 08 2016 00:26:34 GMT+0700 (ICT) nếu ở VN.
Tức là set vào thời gian của múi giờ -5 vào new Date(), client sẽ tự convert sang timezone của nó. Có điều việc này đòi hỏi server phải set múi giờ trên thời gian trả về.
Còn muốn chỉ lấy giờ và phút thì dùng getMinutes() và getHours() thôi.

Bài liên quan
0