Có rất nhiều thông tin về điều chỉnh múi giờ trong PHP, nhưng tôi chưa tìm thấy câu trả lời cho cụ thể những gì tôi muốn làm do tất cả các nhiễu.Điều chỉnh múi giờ trong PHP với DateTime/DateTimeZone
Cho một thời gian trong một múi giờ, tôi muốn chuyển đổi nó thành thời gian trong một múi giờ khác.
This về cơ bản là những gì tôi muốn thực hiện, nhưng tôi cần có khả năng thực hiện việc này bằng cách chỉ sử dụng các PHP dựng sẵn trong PHP, chứ không phải PEAR Date.
Đây là những gì tôi đã làm, nhưng nó dường như luôn luôn cho tôi tương đối bù đắp lấy múi giờ GMT:
$los_angeles_time_zone = new DateTimeZone('America/Los_Angeles');
$hawaii_time_zone = new DateTimeZone('Pacific/Honolulu');
$date_time_los_angeles = new DateTime('2009-09-18 05:00:00', $los_angeles_time_zone);
printf("LA Time: %s<br/>", $date_time_los_angeles->format(DATE_ATOM));
$time_offset = $hawaii_time_zone->getOffset($date_time_los_angeles);
printf("Offset: %s<br/>", $time_offset);
Đây là kết quả:
LA Thời gian: 2009-09 -18T05: 00: 00-07: 00
Bù đắp: -36000
Tôi đã mong đợi 3 giờ (10800 giây). nhưng điều '-7: 00' nói với tôi rằng nó giữ mọi thứ liên quan đến GMT, điều này có thể giải thích tại sao nó cho tôi sự bù đắp "tuyệt đối".
Làm thế nào để tôi chỉ nhận được chênh lệch giữa hai múi giờ mà không có tất cả hoohah GMT này?
Cảm ơn.
UPDATE:
tôi đã xảy ra với tôi rằng tôi có thể làm được điều này và nhận được những gì tôi muốn:
$date_time_los_angeles = new DateTime('2009-09-18 05:00:00', $los_angeles_time_zone);
printf("LA Time: %s<br/>", $date_time_los_angeles->format(DATE_ATOM));
$date_time_hawaii = new DateTime('2009-09-18 05:00:00', $hawaii_time_zone);
printf("Hawaii Time: %s<br/>", $date_time_hawaii->format(DATE_ATOM));
$time_offset = $los_angeles_time_zone->getOffset($date_time_los_angeles) - $hawaii_time_zone->getOffset($date_time_los_angeles);
printf("Offset: %s<br/>", $time_offset);
Nhưng nó cảm thấy lúng túng với tôi. Bất cứ ai biết một cách sạch hơn để làm điều đó?
Ngẫu nhiên :), đây là dành cho PHP> = 5.3.0. – GZipp
Chúng dường như không tính đến DST. Tôi sử dụng các chức năng trên để biến CST thành GMT và tất cả thời gian của tôi đã hết 1 giờ. –