2011-10-28 27 views
5

Tôi đã nhìn thấy một số câu hỏi về điều này nhưng không phải là câu trả lời rõ ràng ... strtotime() sẽ sử dụng múi giờ mặc định được đặt cho PHP khi chuyển đổi chuỗi thành dấu thời gian unix.force php strtotime để sử dụng UTC

Tuy nhiên, tôi muốn chuyển đổi chuỗi để bỏ dấu thời gian trong UTC. Vì không có tham số để làm như vậy, làm thế nào điều này có thể được thực hiện?

Chuỗi tôi đang cố chuyển đổi là: 2011-10-27T20: 23: 39, đã có trong UTC. Tôi muốn đại diện cho đó như là một dấu thời gian unix cũng trong UTC.

Cảm ơn bạn

+0

Đồng thời xem xét sử dụng 'DateTimeZone mới '(' UTC ');', xem http://stackoverflow.com/a/34651091/1066234 –

Trả lời

5

Đặt múi giờ mặc định hệ thống trước khi thực hiện cuộc gọi strtotime:

date_default_timezone_set('UTC'); 
echo strtotime('2011-10-27T20:23:39')."\n"; 

// Proof: 
print_r(getdate(strtotime('2011-10-27T20:23:39'))); 

// IMPORTANT: It's possible that you will want to 
// restore the previous system timezone value here. 
// It would need to have been saved with 
// date_default_timezone_get(). 

See it in action.

+0

Điều đó có gây ra vấn đề với phần còn lại của tập lệnh không? Tôi đoán tôi có thể đặt nó trở lại sau đó? – Brian

+0

@Brian: Có thể gây ra sự cố, vâng. Nhưng miễn là bạn đặt nó trở lại sẽ không có vấn đề gì. – Jon

10

Tôi nhận thấy câu hỏi này rất cũ, nhưng tôi đã tìm thấy một tùy chọn khác có thể hữu ích. Thay vì thiết lập và sau đó quay trở lại múi giờ php, bạn có thể chỉ định các múi giờ là một phần của chuỗi bạn vượt qua để strtotime như vậy:

echo date_default_timezone_get(); 
output: America/Chicago 

echo gmdate('Y-m-d H:i:s', strtotime('2011-10-27T20:23:39')); 
output: 2011-10-28 01:23:39 

echo gmdate('Y-m-d H:i:s', strtotime('2011-10-27T20:23:39 America/Chicago')); 
output: 2011-10-28 01:23:39 

echo gmdate('Y-m-d H:i:s', strtotime('2011-10-27T20:23:39 UTC')); 
output 2011-10-27 20:23:39 

Lưu ý: Tôi đang trên PHP 5.5.9, nhưng điều này nên làm việc trong bất kỳ phiên bản php nào.

+1

Câu trả lời này phù hợp hơn với câu trả lời được chấp nhận. +1 – Druckles

+2

Điều này dễ dàng hơn nhưng bạn phải cẩn thận với đầu vào của người dùng. Nếu bạn chỉ gửi những gì người dùng đã nhập, bạn sẽ không bao giờ biết liệu họ có bao gồm múi giờ hay thứ gì đó sẽ làm xáo trộn chuỗi đó hay không. –

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