2011-09-02 22 views
5

Với chuỗi ngày sau: Fri Sep 02 2011 21:00:00 GMT+0100 (GMT Daylight Time)ngày strtotime kết quả kỳ lạ

trong php nếu tôi làm một strtotime trên trên, và sau đó chuyển đổi nó trở lại một chuỗi ngày, có vẻ như để đạt được một giờ.

echo $str_date," Vs ",date("c",strtotime($str_date)); 

Tạo:

Fri Sep 02 2011 21:00:00 GMT+0100 (GMT Daylight Time) Vs 2011-09-02T22:00:00+01:00

Tôi nhận ra điều này là để làm với tiết kiệm ánh sáng ban ngày, nhưng làm thế nào để bù đắp cho điều này?

Trả lời

1

Tôi nhận thấy điều này là để làm với tiết kiệm ban ngày, nhưng làm thế nào để bù đắp cho điều này?

Bằng cách không sử dụng date()strtotime(); lớp học DateTime được ưu tiên.

$str_date = 'Fri Sep 02 2011 21:00:00 GMT+0100'; 
$datetime = new DateTime($str_date); 
echo $datetime->format('c'); // 2011-09-02T21:00:00+01:00 

hoặc theo kiểu thủ tục

$str_date = 'Fri Sep 02 2011 21:00:00 GMT+0100'; 
echo date_format(date_create($str_date), 'c'); // 2011-09-02T21:00:00+01:00 

Bên cạnh: nếu bạn muốn vẫn sử dụng date()/strtotime() sau đó, như là câu trả lời khác và quan sát của mình xuất hiện, bạn cần phải cẩn thận với các múi giờ được sử dụng trong chuỗi ngày và tập lệnh của bạn.

+0

Điều này tạo ra kết quả mong đợi, cảm ơn bạn. –

3

Tôi nghĩ rằng bạn hiểu lầm,
không có ngày tiết kiệm ánh sáng trong trường hợp này,
NHƯNG giờ, bạn có được một giờ vì lý do đó

trong múi giờ của tôi (GMT + 8)

php -r "echo date('r', strtotime('Fri Sep 02 2011 21:00:00 GMT+0100'));" 
Sat, 03 Sep 2011 04:00:00 +0800 

mà tôi đạt được 7 giờ, do GMT+8 - GMT+1 = 7

1

Bạn sử dụng phiên bản PHP nào? Cài đặt date.timezone của bạn là gì? Tôi hỏi vì tôi không thể tái tạo đầu ra của bạn chạy PHP 5.3.6 trên Mac OS X:

$str_date = 'Fri Sep 02 2011 21:00:00 GMT+0100 (GMT Daylight Time)'; 
echo $str_date," Vs ",date("c",strtotime($str_date)); 
// Fri Sep 02 2011 21:00:00 GMT+0100 (GMT Daylight Time) Vs 1970-01-01T01:00:00+01:00 

này là đúng vì Fri Sep 02 2011 21:00:00 GMT+0100 (GMT Daylight Time) không phải là một chuỗi ngày/thời gian hợp lệ.

$str_date = 'Fri Sep 02 2011 21:00:00 GMT+0100'; 
echo $str_date," Vs ",date("c",strtotime($str_date)); 
// Fri Sep 02 2011 21:00:00 GMT+0100 Vs 2011-09-02T22:00:00+02:00 

Điều này đúng vì tôi đang ở GMT + 2.

+0

yup, '(GMT Daylight Time)' là thừa – ajreal

0

Có vẻ như strtotime() làm cho thời gian của bạn như là định dạng SOAP: YY "-" MM "-" DD "T" HH ":" II ":" SS frac tzcorrection?

kết quả là:

"2008-07-01T22:35:17.02", "2008-07-01T22:35:17.03+08:00" 

Bạn có thể thử để định dạng chuỗi thời gian của bạn như một số định dạng thời gian khác. Hãy xem trong số http://www.php.net/manual/en/datetime.formats.compound.php

Các vấn đề liên quan