2009-02-17 46 views
32

Tôi có một chuỗi bằng một ngày, được biểu thị bằng số mili giây kể từ thời đại Unix.php: chuyển đổi mili giây cho đến ngày

Tôi đang cố gắng xuất nó thành d-m-Y.

Chuỗi tôi đã được đưa ra là "1227643821310", và tôi nói rằng kết quả sẽ tương đương với 2008/02/12, nhưng tôi cứ bị một kết quả của 25-11-2008

Mã của tôi như sau:

$mil = 1227643821310; 
$seconds = $mil/1000; 
echo date("d-m-Y", $seconds); 

Bất kỳ ý tưởng nào về lý do tại sao điều này có thể?

Trả lời

34

Bạn đã làm đúng, 1227643821 chỉ đơn giản là không phải là 02-12-2008, thực sự là 25-11-2008.

+0

Đồng ý. Xem ở đây để đảm bảo: http://www.onlineconversion.com/unix_time.htm – ryeguy

+0

Bạn thực sự là đúng - nó chỉ ra nguồn tôi đã được đưa ra là sai. –

+0

'ngày lặp lại (" d-m-Y ", ($ mil/1000)); '- Bất kỳ lý do gì để không chỉ lưu một số mã và làm tất cả trong một lần? Luôn luôn tìm cách để tiết kiệm bộ nhớ và cắt giảm bộ nhớ không cần thiết/biến/dòng. – Wes

1

Điều duy nhất tôi có thể nghĩ đến là thử làm tròn phần thập phân trước khi chuyển đổi thành một ngày. Nếu điều đó không thay đổi kết quả, thì kết quả là chính xác.

+0

Đã được thử, kết quả sẽ giống nhau. –

1

Jeff, điều quan trọng cần hiểu khi giao dịch với dấu thời gian: chúng đại diện cho thời gian đã trôi qua từ 0:00:00 01.01.1970 trong GMT, không phải trong múi giờ của bạn (trừ khi bạn là chính mình trong GMT, tất nhiên).

1227643821 thực sự đại diện cho thời gian GMT là 20:10:21 25.11.2008.

Đây là ngày 25 tháng 11 năm 2008 ở hầu hết mọi nơi trên thế giới, tuy nhiên ở múi giờ ở phía đông Moscow (và trong múi giờ Moscow vào mùa hè vì giờ tiết kiệm ánh sáng ban ngày) đã là ngày 26 tháng 11. Vì múi giờ đông nhất "cực" là GMT + 14, không có nơi nào trên thế giới nơi dấu thời gian của 1227643821 có thể đại diện cho một ngày sau đó là ngày 26.

Tác giả của giá trị ban đầu có thể đã nhầm lẫn bằng cách nào đó khi xử lý múi giờ. Hoặc chỉ đơn giản là nhầm lẫn. Ví dụ: khi tính giá trị, hãy thêm giây thay vì mili giây ở một số bước.

+1

Ilya, đúng là Unix Timestamps (thời gian POSTIX) là lượng thời gian đã trôi qua từ thời đại Epoch trong GMT, tuy nhiên, khi bạn sử dụng [date()] của PHP (http://php.net/manual/en /function.date.php), nó chuyển đổi ngày đó thành thời gian cục bộ của máy chủ. Để có được ngày trong giờ GMT, bạn phải sử dụng hàm [gmdate()] của PHP (http://www.php.net/manual/en/function.gmdate.php). –

10

Tôi chỉ cần thêm H: i: s như trong ví dụ dưới đây:

$mil = 1227643821310; 
$seconds = $mil/1000; 
echo date("d/m/Y H:i:s", $seconds); 
Các vấn đề liên quan