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ì 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
Cool man, công nhận là mình không nghĩ đến có thể get IP bằng jquery
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
khi sử dụng new Date() trên javascript. Sử dụng trên nền linux:
=> 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.
=> sẽ đỡ hơn 1 step convert lại sang UTC.
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…
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
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.