Cách dễ nhất để có được bù trừ UTC trong PHP, liên quan đến múi giờ hiện tại (hệ thống) là gì?Bù trừ UTC trong PHP
Trả lời
date('Z');
lợi nhuận UTC bù đắp trong vài giây.
$this_tz_str = date_default_timezone_get();
$this_tz = new DateTimeZone($this_tz_str);
$now = new DateTime("now", $this_tz);
$offset = $this_tz->getOffset($now);
chưa được kiểm tra, nhưng nên làm việc
hữu ích nếu bạn đang sử dụng lớp DateTime trong PHP 5. Nhưng tôi không. –
date("Z")
sẽ trả về giá trị UTC tương ứng với múi giờ của máy chủ chứ không phải múi giờ máy của người dùng. Để có múi giờ máy của người dùng, bạn có thể sử dụng hàm javascript getTimezoneOffset()
trả về chênh lệch thời gian giữa thời gian UTC và giờ địa phương, tính bằng phút.
<script type="text/javascript">
d = new Date();
window.location.href = "page.php?offset=" + d.getTimezoneOffset();
</script>
Và trong page.php
giữ mã php của bạn, bạn có thể làm bất cứ điều gì bạn muốn với giá trị bù đó. Hoặc thay vì chuyển hướng đến một trang khác, bạn có thể gửi giá trị bù đắp cho tập lệnh php của mình thông qua Ajax, theo nhu cầu của bạn.
OP được yêu cầu rõ ràng * "liên quan đến múi giờ hiện tại (hệ thống)?" * – Madbreaks
OP đã hỏi giải pháp PHP, chứ không phải JS –
Tôi đã làm một phiên bản được sửa đổi đôi chút về những gì Oscar đã làm.
date_default_timezone_set('America/New_York');
$utc_offset = date('Z')/3600;
Điều này đã cho tôi khoản chênh lệch từ múi giờ, EST, sang UTC, tính theo giờ.
Giá trị $ utc_offset là -4.
ngày lặp lại ('P'); // sẽ ra một cái gì đó 02: 00 hoặc -04: 00
Đây là cùng Javascript date.getTimezoneOffset()
chức năng:
<?php
echo round(date('Z')/-60,2);
?>
['date (' Z ') '] (http://php.net/manual/en/function.date.php) là *« Thời gian bù đắp trong vài giây »» Dấu trừ nên ở lại ... Chia cho '60'. Không phải bởi '-60' Sau đó, điều này sẽ xuất ra bù trừ múi giờ của máy chủ. OP muốn (trong năm 2008) để so sánh bù đắp của người dùng địa phương với giá trị này bạn nói về. –
@LouysPatriceBessette 'getTimezoneOffset()' chức năng trong javascript cho giống như giá trị này chính xác (-180). –
Điều đó đúng với [JavaScript getTimezoneOffset()] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getTimezoneOffset) ... Và chỉ trong vài phút thay vì giây. Ngày PHP không làm đảo ngược giá trị tuyệt đối này. –
Cảm ơn. Thật không may, PHP yêu cầu bạn gọi date_default_timezone_set(). Nếu bạn đặt thành GMT, ngày của bạn từ cơ sở dữ liệu sẽ vẫn ở thời gian địa phương, nhưng ngày ('Z') sẽ trả về 0. Nếu bạn đặt nó vào múi giờ của máy chủ, bạn cũng có thể chỉ cần mã hóa cứng bù đắp của máy chủ từ GMT trong một tệp bao gồm. Thật đáng kinh ngạc là không có cách nào đơn giản để làm điều này. EDIT: Tôi phát hiện ra rằng bạn có thể làm date_default_timezone_set (date_default_timezone_get()). Làm thế nào asinine! – Oscar
ngày ('Z') trả về bù giờ GMT trong giây – Dahomz
Trả về 0. – Adry