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 ?
BonBon viết 19:53 ngày 09/10/2018
ủa ? hổng có ai quan tâm đến cái này hẻ ? hay là bon viết ko đúng
aspnet viết 19:53 ngày 09/10/2018
Hic, giờ giấc post bài thì mấy ai để ý đâu mà quan tâm u
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...
vikhoa viết 19:53 ngày 09/10/2018
K chưa coi code nên không biết nó lưu thẳng giờ vào DB luôn hay là chỉ lưu 1 giờ chuẩn (GMT) rồi cộng trừ với giờ Server và giờ của User để ra giờ hiện tại.

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 đó.
tulipden viết 19:56 ngày 09/10/2018
Mình thấy bài này hay lắm. Có ích lắm, nhưng nó tùy thuộc vào nơi đặt host của mình. Mà cho dù ở đâu, thì giờ GMT +7 cũng là giờ Vietnam hết. Hình như cái vbb này tính sai giờ
Deathly Smile viết 20:00 ngày 09/10/2018
Hí hí
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ỉ ?
BonBon viết 20:03 ngày 09/10/2018
to DS : chính xác hi.hi..... ý bon là vậy đó

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 đó
donghuc viết 19:49 ngày 09/10/2018
Topic này giúp em chỉnh lại cái script chạy ngon lành. Hâm mộ 2 anh quá
Deathly Smile viết 19:51 ngày 09/10/2018
Ủ, KO ai phản bác ý kiến của tui với bonbon à ?
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à
HocHocNuaHocMai viết 20:01 ngày 09/10/2018
à gặp cao thủ đây rồi, các bác làm ơn xử lý giúp cho em với, sao em dùng IBF forum, chọn giờ VN mà vẫn sai 5h so với thực tế là sao vậy. Các bác giúp em nhé.
Bài liên quan
0