2013-06-30 28 views
28

tôi cần phải hiển thị và xử lý UTC ngày theo định dạng sau:Làm cách nào để định dạng ngày UTC để sử dụng trình chỉ định vùng Z (Zulu) trong php?

2013-06-28T22: 15: 00Z

Như định dạng này là một phần của tiêu chuẩn ISO8601 Tôi không có rắc rối tạo Đối tượng DateTime từ chuỗi như trên. Tuy nhiên tôi không thể tìm thấy một cách sạch (có nghĩa là không có thao tác chuỗi như chất nền và thay thế, vv) để trình bày đối tượng DateTime của tôi ở định dạng mong muốn. Tôi đã cố gắng để tinh chỉnh các thiết lập máy chủ và datetime php, với rất ít thành công. Tôi luôn nhận được:

$date->format(DateTime::ISO8601); // gives 2013-06-28T22:15:00+00:00 

Có định dạng ngày hoặc cài đặt cấu hình nào cho tôi chuỗi mong muốn không? Hoặc tôi sẽ phải chắp thêm 'Z' theo cách thủ công sang định dạng thời gian tùy chỉnh?

+1

+1 để sử dụng DateTime ngay từ đầu. – Herbert

Trả lời

48

Không, không có hằng số đặc biệt nào cho định dạng mong muốn. Tôi sẽ sử dụng:

$date->format('Y-m-d\TH:i:s\Z'); 

Nhưng bạn sẽ phải đảm bảo rằng thời gian bạn đang sử dụng thực sự là UTC để tránh lỗi thông dịch trong ứng dụng của bạn.

+1

Đủ công bằng. Cảm ơn! – salla

+0

Đây là một câu trả lời tuyệt vời, nhưng bạn có nên sử dụng 'setTimeZone' để điều chỉnh theo UTC không? Hoặc là có một cách sạch hơn? –

+1

@MattJohnson Nó phụ thuộc. Nếu dấu thời gian có nghĩa là được hiểu là UTC (nhưng không chứa giá trị offset theo nghĩa đen) và máy chủ của bạn có múi giờ khác với UTC, 'setTimeZone()' sẽ thay đổi giá trị bằng chữ của dấu thời gian. Điều này có thể không phải là những gì bạn muốn. Mặt khác, nếu các dấu thời gian hiện tại có nghĩa là được diễn giải trong thời gian của máy chủ và bạn * muốn * chuyển đổi chúng thành thời gian UTC, thì 'setTimeZone()' là bắt buộc. – hek2mgl

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