09/10/2018, 17:47
[DIS] Bàn về độ chênh lệch thời gian trong lập trình web ! :D
Ví dụ có một câu hỏi đặt ra:
ví dụ hiện tại, diễn đàn đang được đặt tại USA (GMT -5) và chúng ta đang xem diễn đàn tại Việt Nam (+7)
tức là chênh lệch 12h.
mỗi bài post chúng ta gởi lên thì đều theo giờ server (time())
function vbdate của VBB đã điều chỉnh bằng cách hiện thị theo cách
date('d/m/Y',$time + ($user[time_zone] - $setting[time_zone])*3600)
Nhờ vậy ta sẽ thấy giờ hiển thị đúng trên Diễn đàn.
Vậy nếu bây giờ nếu VK chuyển server sang một nơi khác có GMT là -7 chẳng hạn. Vk cũng sẽ vào CP để đổi Time Zone của VB thành -7.
Vậy lúc đó toàn bộ database cũ hình như sai giờ hết thì phải ? Các bài post mới sẽ đúng giờ, nhưng bài cũ sẽ trễ hết 2h.
theo các bạn thì có phải vậy ko ?
ví dụ hiện tại, diễn đàn đang được đặt tại USA (GMT -5) và chúng ta đang xem diễn đàn tại Việt Nam (+7)
tức là chênh lệch 12h.
mỗi bài post chúng ta gởi lên thì đều theo giờ server (time())
function vbdate của VBB đã điều chỉnh bằng cách hiện thị theo cách
date('d/m/Y',$time + ($user[time_zone] - $setting[time_zone])*3600)
Nhờ vậy ta sẽ thấy giờ hiển thị đúng trên Diễn đàn.
Vậy nếu bây giờ nếu VK chuyển server sang một nơi khác có GMT là -7 chẳng hạn. Vk cũng sẽ vào CP để đổi Time Zone của VB thành -7.
Vậy lúc đó toàn bộ database cũ hình như sai giờ hết thì phải ? Các bài post mới sẽ đúng giờ, nhưng bài cũ sẽ trễ hết 2h.
theo các bạn thì có phải vậy ko ?
Bài liên quan
Mình nghĩ giờ nó đã lưu vào CSDL rồi thì khi lấy ra nó vẫn vậy thôi, làm sao mà tự thay đổi được??
không tin u cứ thử test ở Local xem...
K nghĩ, cách theo giờ chuẩn GMT là cách tốt nhất, dù có chuyển server đi đâu thì giờ của các bài viết vẫn đúng thôi. Có phải vậy không Bon ?
To ASPNET : Giờ post bài cũng quan trọng lắm đó, tại bạn không để ý thôi. Nó có ích trong nhiều trường hợp đó.
Cách giải quyết của tui này: khi lưu vào DB, thay vì lưu $time = time(); ta sẽ lưu $time = time() - $difftime;
Với $difftime = độ lệch giữa servertime và GMT.
Khi lấy ra thì dùng format $realtime = $time + $timeoffset;
Với $timeoffset = độ lệch giữa giờ địa phương với GMT.
Việc xử lý với hàm date() thì ko nói nữa nhé
Nếu bạn so sánh cách lấy time của vbb và của tôi, sẽ thấy nếu cách của tôi gộp vào, "có vẻ" chẳng khác gì cách của vbb. Tuy nhiên điểm gây nên chênh lệch là vào thời điểm lưu lại $time vào DB.
Cách lưu của tôi sẽ làm $time luôn có h GMT (về điểm này các bạn có thể lưu ý để $time luôn có h Hanoi chẳng hạn ). Sau đó khi dùng h này để xử lý theo timezone, dù ở host nào cũng ko lo bị lệch.
Còn cách lưu của VBB thế nào thì bonbon nói đúng rồi đấy.
Ổn ko nhỉ ?
nếu theo như vậy thì rõ là VBB đã lưu giờ sai phải hun ?
vì xem trong các lệnh query thì toàn là time() mà đây là giờ của server, nên nếu change server thì sẽ lệch giờ !
Cách của DS thì bon cũng nghĩ vậy đó :p hi.hi..... khi đưa giờ vào trong DB thì ta phải trừ cho thành giờ của GMT, rồi khi nào hiện lên thì cộng thêm giờ offset của máy mở web đó lên là đúng
cám ơn các bạn đã quan tâm
PS: Giờ trong các bài viết có thể là ít để ý, nhưng khi mình làm việc với khách hàng, nếu thời gian mà sai lệch thì lớn chuyện đó
Bác donghuc lại còn chỉnh lại scripts nữa ? chít chít, quả này đắc tội to rùi.
Hì, thực ra thì hàm time() luôn trả về giá trị chính xác và nhất quán dù server đặt ở đâu đi nữa. Luôn trả lại UNIX timestamp mà
Vấn đề là lúc lấy ra thì xử lý thế nào cho chính xác với từng users thui, vbb chả có gì sai cả
Mọi người nghĩ thế nào ? hà hà hà