Hướng dẫn dùng timezone miami trong PHP
Đôi lúc các bạn xem các hướng dẫn về hàm lấy thời gian :date(format,timestamp). Show Nếu chưa biết hàm date(format,timestamp) bạn có thể xem ở link:http://congnghe5s.com/bai-viet/xu-ly-ngay-gio-trong-php.html. Bạn thực hiện test lệnh trên máy và kết quả không khớp với time hiện tại. Đó là vì lí do thời gian hay timezone trên server bạn đã cài đặt khác vì thế để trả về đúng time bạn muốn bạn có thể dùng hàm: Cú pháp:date_default_timezone_set ( string tham số : $
date_default_timezone_set('Asia/Ho_Chi_Minh'). Sau đó các bạn dùng hàm : echo date('d/m/Y - H:i:s'); ra đúng kết quả time ở Việt Nam. Ví dụ: date_default_timezone_set('Asia/Ho_Chi_Minh'); if (date_default_timezone_get()) { echo 'date_default_timezone_set: ' . date_default_timezone_get() . ' '; } echo date('d/m/Y H:i:s'); Ví dụ trên có 1 hàm cũng khá quan trọng : date_default_timezone_get() trả về timezone mặc định của server bạn đang chạy hoặc là đã được thiết lập thông qua date_default_timezone_set(). Qua bài viết hy vọng các bạn có thêm kiến thức khi xử lý ngày tháng trong PHP. Đôi lúc các bạn xem các hướng dẫn về hàm lấy thời gian :date(format,timestamp). Nội dung chính
Nếu chưa biết hàm date(format,timestamp) bạn có thể xem ở link:http://congnghe5s.com/bai-viet/xu-ly-ngay-gio-trong-php.html. Bạn thực hiện test lệnh trên máy và kết quả không khớp với time hiện tại. Đó là vì lí do thời gian hay timezone trên server bạn đã cài đặt khác vì thế để trả về đúng time bạn muốn bạn có thể dùng hàm: Cú pháp:date_default_timezone_set ( string tham số : $
date_default_timezone_set('Asia/Ho_Chi_Minh'). Sau đó các bạn dùng hàm : echo date('d/m/Y - H:i:s'); ra đúng kết quả time ở Việt Nam. Ví dụ: date_default_timezone_set('Asia/Ho_Chi_Minh'); if (date_default_timezone_get()) { echo 'date_default_timezone_set: ' . date_default_timezone_get() . ' '; } echo date('d/m/Y H:i:s'); Ví dụ trên có 1 hàm cũng khá quan trọng : date_default_timezone_get() trả về timezone mặc định của server bạn đang chạy hoặc là đã được thiết lập thông qua date_default_timezone_set(). Qua bài viết hy vọng các bạn có thêm kiến thức khi xử lý ngày tháng trong PHP. So I was working with the DateTimeZone class in php and was able to print out a list of all the timezones in the United States. I printed it down below. Only issue is I'm afraid the users will not understand what this means? I put it all in a drop-down but say you live in Florida for example, does the average person really know which one of these would be there timezone choice? I think it would be far easier to show PST, EST, MNT, CST or HAST, HST or AKST. Is there a way to still use the DateTimeZone class using the abbreviations PST, EST etc...? By still use I mean, be able to convert between different times, like 2:00 PST convert to EST etc...?
Từ lâu việc xử lý thời gian đã là một chủ đề mang lại nhiều cơn đau đầu cho các developers, đặc biệt nếu phải xử lý thời gian theo nhiều múi giờ khác nhau. Bài viết này sẽ giúp bạn “đả thông kinh mạch” để thoát khỏi nỗi sợ này. Một số thuật ngữ mình sẽ sử dụng trong bài viết:
Có 2 loại thời gianĐể hiểu được bản chất vấn đề, chúng ta cần nắm rõ 2 khái niệm sau: 1. Thời gian tuyệt đốiLà một khoảng khắc cụ thể (moment) trong dòng chảy lịch sử.
Khi nói về thời gian tuyệt đối, cần có đủ hai thành phần: ngày giờ + ngữ cảnh nơi chốn.
Ngữ cảnh ở đây chính là múi giờ (zone). Các múi giờ được đặc trưng bởi một độ lệch thời gian (offset) so với giờ phối hợp quốc tế UTC. Độ lệch được biểu diễn dưới dạng
Trong máy tính, moment được biểu diễn dưới dạng Epoch Seconds – số giây trôi qua kể từ 00:00:00 ngày 1 tháng 1 năm 1970 theo giờ UTC. 2. Thời gian tương đốiLà thời gian chỉ dùng để hiển thị (relative/represent time – gọi ngắn gọn là rtime), không bao gồm ngữ cảnh múi giờ.
Trong sinh hoạt thường ngày, khi muốn đối chiếu thời gian, chúng ta không thể dùng rtime, mà phải thêm vào một múi giờ hoặc một độ lệch để rtime trở nên tuyệt đối (moment) rồi mới đem đi so sánh.
Và một vài quy ướcSau khi đã phân biệt được rtime và moment, chúng ta sẽ tìm hiểu cách để biểu diễn chúng. 1. Tiêu chuẩn ISO-8601Được công bố vào năm 1988, ISO-8601 là một tiêu chuẩn quốc tế mô tả một quy tắc chung để viết ngày giờ, tiện cho việc liên lạc & trao đổi thông tin liên quan đến thời gian. Dưới đây là một moment được viết theo tiêu chuẩn ISO-8601, bao gồm ngày, giờ và offset Như vậy, để biểu diễn rtime, chúng ta chỉ cần bỏ đi phần offset. Và ngược lại, khi gắn offset vào rtime (ngày giờ), chúng ta có moment.
Để ý chúng ta thấy, moment trong tiêu chuẩn ISO-8601 chỉ sử dụng offset mà không đề cập đến tên của múi giờ. 2. IANA Time Zone DatabaseHay còn gọi là tz database, là một bộ database tổng hợp thông tin của toàn bộ múi giờ trên thế giới, được quản lý bởi tổ chức ICANN. Trong tz database, một múi giờ sẽ có tên gọi dựa trên vị trí địa lý của nó, theo dạng
Lúc này có thể bạn sẽ hỏi
Đúng là để biểu diễn thời gian tuyệt đối, chỉ cần thời gian tương đối (ngày giờ) và offset là đủ. Cuộc sống sẽ cứ êm đềm như vậy, nếu không xuất hiện khái niệm Daylight Saving Time. 3. Daylight Saving Time (DST) là cái gì?Nếu bạn chưa biết, một thành phố có thể sử dụng 2 múi giờ luân phiên trong năm.
Tại sao lại có hiện tượng lạ này?
Điều này dẫn chúng ta đến 1 sự thật “kinh hoàng”: tồn tại những múi giờ mang 2 giá trị offset luân phiên nhau trong năm 😱😱😱 Đây chính là lý do bộ dữ liệu IANA tz database ra đời:
Ok, lý thuyết như vậy đủ rồi. Bây giờ chúng ta sẽ tìm hiểu code thực tế như thế nào. Java Date Time APIKhi xử lý thời gian, trước đây chúng ta thường dùng
Để ý ta thấy, đội ngũ Java sử dụng chữ “Local” để ám chỉ giờ địa phương. Do đó các class bắt đầu bằng chữ Ngoài ra, (có thể bạn đã biết), 1. DiagramDưới đây là diagram tóm tắt cách chuyển đổi qua lại giữa các class 2. Áp dụng vào codeNguyên tắc chung:
Hãy cùng xem qua một vài thao tác xử lý, giả sử chúng ta muốn xuất báo cáo được tạo trong năm 2020.
Như bạn thấy, nếu đã phân biệt được rõ ràng đâu là moment, đâu là rtime, việc xử lý thời gian trở nên vô cùng đơn giản. 3. Một vài thao tác dịch chuyển múi giờVới Date Time API 1.8, việc chuyển đổi qua lại giữa các múi giờ cũng linh hoạt dễ dàng. Hãy xem xét ví dụ sau:
Nhìn vào tên method
Trái ngược với ví dụ trước, ở đây 4. Vậy còn Daylight Saving Time (DST)?Thật may mắn là chúng ta không cần làm gì hết! JRE và JDK sẽ handle toàn bộ việc thay đổi
liên quan đến DST nếu chúng ta sử dụng Chúng ta sẽ tái hiện lại thời điểm bắt đầu DST tại Victoria ở ví dụ đã nói ở trên, lúc 2h sáng chủ nhật đầu tiên của tháng 10 (là ngày 04/10/2020)
Sau đó cộng thêm 10 phút để qua thời điểm DST.
Chúng ta thấy thời gian đã tự động cộng thêm 1 tiếng, và độ dời offset cũng đã tự thay đổi từ +10:00 thành +11:00 Trong tương lai, nếu có bất kì thay đổi nào liên quan đến DST tại một địa phương, dữ liệu sẽ được cập nhật tại website của tz database và được chỉnh sửa trong lần phát hành tiếp theo của JRE. Chúng ta đã hiểu được khái niệm moment (tgian tuyệt đối) và rtime (tgian tương đối).
Ứng dụng vào trong code:
KếtVậy là mình đã giới thiệu xong những khái niệm quan trọng. Một khi đã nắm rõ chúng, mình tin rằng việc xử lý ngày giờ không còn là nỗi sợ hãi quá lớn của các developers Java 😊 Tuy nhiên, vẫn sẽ có những sai lầm tạo ra bug nếu chúng ta không chú ý, hẹn gặp lại các bạn ở phần tiếp theo. (Phần tiếp theo: Xử lý DateTime như thế nào cho chuẩn?) Thậm chí Marvel đã quên mất sự chênh lệch múi giờ giữa Wakanda và New York – 9gag Liên kết ngoài
|