2008-10-11 33 views

Trả lời

59
date('Z'); 

lợi nhuận UTC bù đắp trong vài giây.

+1

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

+0

ngày ('Z') trả về bù giờ GMT trong giây – Dahomz

+0

Trả về 0. – Adry

16

timezone_offset_get()

$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

+0

hữu ích nếu bạn đang sử dụng lớp DateTime trong PHP 5. Nhưng tôi không. –

-2

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.

+1

OP được yêu cầu rõ ràng * "liên quan đến múi giờ hiện tại (hệ thống)?" * – Madbreaks

+1

OP đã hỏi giải pháp PHP, chứ không phải JS –

10

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.

11

ngày lặp lại ('P'); // sẽ ra một cái gì đó 02: 00 hoặc -04: 00

1

Đây là cùng Javascript date.getTimezoneOffset() chức năng:

<?php 
echo round(date('Z')/-60,2); 
?> 
+0

['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ề. –

+0

@LouysPatriceBessette 'getTimezoneOffset()' chức năng trong javascript cho giống như giá trị này chính xác (-180). –

+0

Đ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ác vấn đề liên quan