2011-12-29 37 views
13

Mã đầu tiênLàm thế nào để có được Unix timestamp trong php dựa trên múi giờ

echo time() . '<br/>'; 
echo date('Y-m-d H:i:s') . '<br/>'; 
date_default_timezone_set('America/New_York'); 

echo time() . '<br/>'; 
print_r($timezones[$timezone] . '<br/>'); 
echo date('Y-m-d H:i:s') . '<br/>'; 

Trong đoạn mã trên ngày được in theo múi giờ nhưng unix timestamp là giống nhau, ngay cả sau khi cài đặt múi giờ mặc định

Làm thế nào chúng ta có thể in dấu thời gian unix theo múi giờ?

Trả lời

27

Câu trả lời được cung cấp bởi Volkerk là chính xác, nhưng nếu bạn thực sự cần một công việc xung quanh hãy xem ví dụ của tôi.

<?php 

//default timezone 
$date = new DateTime(null); 
echo 'Default timezone: '.$date->getTimestamp().'<br />'."\r\n"; 

//America/New_York 
$date = new DateTime(null, new DateTimeZone('America/New_York')); 
echo 'America/New_York: '.$date->getTimestamp().'<br />'."\r\n"; 

//Europe/Amsterdam 
$date = new DateTime(null, new DateTimeZone('Europe/Amsterdam')); 
echo 'Europe/Amsterdam: '.$date->getTimestamp().'<br />'."\r\n"; 

echo 'WORK AROUND<br />'."\r\n"; 
// WORK AROUND 
//default timezone 
$date = new DateTime(null); 
echo 'Default timezone: '.($date->getTimestamp() + $date->getOffset()).'<br />'."\r\n"; 

//America/New_York 
$date = new DateTime(null, new DateTimeZone('America/New_York')); 
echo 'America/New_York: '.($date->getTimestamp() + $date->getOffset()).'<br />'."\r\n"; 

//Europe/Amsterdam 
$date = new DateTime(null, new DateTimeZone('Europe/Amsterdam')); 
echo 'Europe/Amsterdam: '.($date->getTimestamp() + $date->getOffset()).'<br />'."\r\n"; 
?> 

Lấy dấu thời gian thường xuyên và thêm UTC bù đắp

+1

Nó có thể gây nhầm lẫn để sử dụng một workaround như thế này như bạn có nguy cơ nhận được vào tất cả các loại rắc rối với múi giờ vs dấu thời gian unix. Với OP quy định một định dạng đầu ra sẽ tốt hơn khi sử dụng phương thức định dạng DateTime, tức là $ date-> format ('Y-m-d H: i: s') – liquorvicar

+1

Tôi đồng ý với bạn hoàn toàn, và tôi sẽ không khuyến cáo điều này. Lưu trữ dưới dạng dấu thời gian unix sẽ tốt hơn và khi hiển thị dữ liệu chuyển đổi thành múi giờ chính xác. Nếu người dùng sẽ lưu trữ thông tin này trong cơ sở dữ liệu, tôi sẽ loại bỏ định dạng dấu thời gian unix hoàn toàn và đi cho một kiểu cơ sở dữ liệu datetime (vì các datetime/chức năng khác nhau sẽ giúp bạn sống dễ dàng hơn) –

+0

= new DateTime (null, new DateTimeZone ('Philippines')); '. Tôi chỉ muốn nhận được từ PH. – RoCk

18

https://en.wikipedia.org/wiki/Unix_time

thời gian Unix, hoặc thời gian POSIX, là một hệ thống để mô tả khoảnh khắc trong thời gian, định nghĩa là số giây trôi qua kể từ nửa đêm Coordinated Universal Time (UTC) của Thứ năm 1 tháng 1, năm 1970

Dấu thời gian unix không bị ảnh hưởng bởi cài đặt múi giờ. Việc đặt múi giờ chỉ ảnh hưởng đến việc diễn giải giá trị dấu thời gian.

+1

Tôi muốn các tem thời gian của 'bây giờ' theo múi giờ, bất cứ công việc xung quanh cho – jimy

+0

này bạn phải lưu dấu thời gian _and_ id múi giờ . Hoặc bạn lưu trữ một đại diện ngày/giờ khác có thể hoặc không bao gồm múi giờ, ví dụ: như ISO 8601 ngày – VolkerK

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