Môi trường máy chủ
Redhat Enterprise Linux Php 5.3.5
PHP 5.3.5
Vấn đề
Giả sử tôi có một ngày và giờ UTC như 2011-04-27 02:45 và tôi muốn chuyển đổi nó sang thời gian địa phương của tôi, đó là Mỹ/New_York.
Ba câu hỏi:
1.] Mã của tôi dưới đây có thể giải quyết vấn đề, bạn có đồng ý không?
2.] Nhưng, giá trị của $ offset có tự động điều chỉnh cho thời gian tiết kiệm ánh sáng ban ngày [DST] không? 3.] Nếu không, làm thế nào tôi nên điều chỉnh mã của mình để tự động điều chỉnh cho DST?
3.] If not, how should I tweak my code to automatically adjust for DST ?
Cảm ơn bạn :-]
Hỏi ngày 27 tháng 4 năm 2011 lúc 15:23Apr 27, 2011 at 15:23
1
Điều này sẽ làm những gì bạn muốn sử dụng các lớp DateTime và DateTimezone gốc của PHPS:
$utc_date = DateTime::createFromFormat[
'Y-m-d G:i',
'2011-04-27 02:45',
new DateTimeZone['UTC']
];
$nyc_date = $utc_date;
$nyc_date->setTimeZone[new DateTimeZone['America/New_York']];
echo $nyc_date->format['Y-m-d g:i A']; // output: 2011-04-26 10:45 PM
Xem trang DateTime :: createdFromFormat Man để biết thêm thông tin.
Sau một số thử nghiệm giữa các múi giờ làm và hiện không có DST, tôi đã phát hiện ra rằng điều này sẽ tính đến DST. Chuyển đổi tương tự bằng phương pháp của tôi ở trên hiển thị cùng thời gian kết quả.
Đã trả lời ngày 27 tháng 4 năm 2011 lúc 15:48Apr 27, 2011 at 15:48
TreffynnontreffynnonTreffynnon
21.1k6 Huy hiệu vàng62 Huy hiệu bạc97 Huy hiệu Đồng6 gold badges62 silver badges97 bronze badges
4
Tôi biết đây là một bài viết cũ, nhưng có một dòng khác bạn cần thêm để có được thời gian chính xác.
Trước khi chuyển đổi sang giờ địa phương, bạn cần đặt múi giờ mặc định thành UTC như thế này [nếu đó là múi giờ của thời gian bạn đang cung cấp]:
function GmtTimeToLocalTime[$time] {
date_default_timezone_set['UTC'];
$new_date = new DateTime[$time];
$new_date->setTimeZone[new DateTimeZone['America/New_York']];
return $new_date->format["Y-m-d h:i:s"];
}
Đã trả lời ngày 28 tháng 7 năm 2014 lúc 16:20Jul 28, 2014 at 16:20
LComparelComparelcompare
89712 Huy hiệu bạc10 Huy hiệu đồng12 silver badges10 bronze badges
date_default_timezone_set['America/New_York']; // Set timezone.
$utc_ts = strtotime["2011-04-27 02:45"]; // UTC Unix timestamp.
Ngay sau khi thực hiện điều này, $ UTC_TS chứa thời gian địa phương. PHP xử lý chính DST.
=H=
Đã trả lời ngày 27 tháng 4 năm 2011 lúc 15:43Apr 27, 2011 at 15:43
2
Tôi sẽ cải thiện câu trả lời của Hasin Hayder
date_default_timezone_set['America/New_York']; // Set timezone.
$utc_ts = strtotime["2011-04-27 02:45 UTC"]; // UTC Unix timestamp.
echo date['Y-m-d H:i:s a T', $utc_ts];
Nó nên đầu ra
2011-04-26 10:45:00 pm EDT
Sự khác biệt là thêm múi giờ nguồn. Strtotime [] chấp nhận thời gian quá bạn biết! :P
Đã trả lời ngày 8 tháng 7 năm 2016 lúc 3:34Jul 8, 2016 at 3:34
Đã trả lời ngày 9 tháng 8 năm 2021 lúc 10:58Aug 9, 2021 at 10:58
AmolamolAmol
Phù hiệu đồng 4144 bronze badges
1