Chuyển đổi dấu thời gian UNIX thành chuỗi ngày được định dạng


183

Sử dụng PHP, tôi muốn chuyển đổi dấu thời gian UNIX thành chuỗi ngày tương tự như sau: 2008-07-17T09:24:17Z

Làm cách nào để chuyển đổi dấu thời gian như 1333699439sang 2008-07-17T09:24:17Z?

Câu trả lời:


320

Hãy thử gmdatenhư thế này:

<?php
$timestamp=1333699439;
echo gmdate("Y-m-d\TH:i:s\Z", $timestamp);
?>

53
Xin vui lòng không gmdate()trả về ngày / giờ trong GMT. date()sẽ trả lại ngày / giờ địa phương.
Matt K

5
Trên bình luận không có ý nghĩa trong bối cảnh này. Sử dụng ngày với tham số thứ hai là dấu thời gian, như được hiển thị trong câu trả lời, sẽ không in ngày theo múi giờ địa phương. Ngày sẽ được in với thông tin múi giờ bị bỏ qua, vì dấu thời gian không có thông tin múi giờ. gmdate và ngày với tham số dấu thời gian thứ hai là 1333699439 sẽ in cùng thời gian ngày.
Tinus Tate

1
@MattK: Điều này có ý nghĩa, vì Z chỉ ra UTC. Tinus: Dấu thời gian Unix không chứa offset múi giờ. dategmdateđầu ra của sẽ khác nhau dựa trên biến TZ (ít nhất là trên * nix)
Gert van den Berg


Sẽ rất tốt nếu câu trả lời này bao gồm giải pháp cho vấn đề ngược lại, chuyển đổi một ngày được định dạng thành thời gian UNIX.
Olle Härstedt

117

sử dụng chức năng ngày date ( string $format [, int $timestamp = time() ] )

Sử dụng date('c',time()) định dạng để chuyển đổi sang ngày ISO 8601 (được thêm vào PHP 5) -2012-04-06T12:45:47+05:30

sử dụng date("Y-m-d\TH:i:s\Z",1333699439)để có được2012-04-06T13:33:59Z

Dưới đây là một số định dạng hỗ trợ chức năng ngày

<?php
$today = date("F j, Y, g:i a");                 // March 10, 2001, 5:16 pm
$today = date("m.d.y");                         // 03.10.01
$today = date("j, n, Y");                       // 10, 3, 2001
$today = date("Ymd");                           // 20010310
$today = date('h-i-s, j-m-y, it is w Day');     // 05-16-18, 10-03-01, 1631 1618 6 Satpm01
$today = date('\i\t \i\s \t\h\e jS \d\a\y.');   // it is the 10th day.
$today = date("D M j G:i:s T Y");               // Sat Mar 10 17:16:18 MST 2001
$today = date('H:m:s \m \i\s\ \m\o\n\t\h');     // 17:03:18 m is month
$today = date("H:i:s");                         // 17:16:18
?>

Làm cách nào tôi có thể chuyển đổi dấu thời gian cụ thể bằng 'c'? ví dụ 1333699439
Utku Dalmaz

ngày này không hoạt động ("Ymd \ TH: i: s \ Z", 1333699439) tôi đã nhận được 2012-04-06EDT04: 03: 59-14400
Utku Dalmaz

@Ahmet - Lưu ý sử dụng dấu ngoặc kép và dấu ngoặc đơn khi xác định chuỗi
Mark Baker

1
@ user2060451 bất cứ điều gì xảy ra trước dấu gạch chéo ngược được hiển thị dưới dạng ký tự chữ trong chuỗi thời gian kết quả
verbumSapienti

1
@ user2060451: Z được cho là chỉ ra thời gian UTC (trong trường hợp đó nên sử dụng gmdate ...) Kiểm tra thông tin ISO8601 trên tài nguyên nghiên cứu yêu thích của bạn.
Gert van den Berg

56

Giả sử bạn đang sử dụng PHP5.3 thì cách xử lý ngày hiện đại là thông qua lớp DateTime gốc . Để có được thời gian hiện tại, bạn chỉ cần gọi

$currentTime = new DateTime();

Để tạo một đối tượng DateTime từ dấu thời gian cụ thể (tức là không phải bây giờ)

$currentTime = DateTime::createFromFormat( 'U', $timestamp );

Để có được một chuỗi định dạng, sau đó bạn có thể gọi

$formattedString = $currentTime->format( 'c' );

Xem trang hướng dẫn tại đây


1
Làm thế nào tôi có thể chuyển đổi dấu thời gian cụ thể với điều này? ví dụ 1333699439
Utku Dalmaz

@Norse Tất nhiên tôi đọc bài của anh ấy. Tất cả thông tin anh ấy cần là trong bài viết của tôi. Tất cả những gì anh phải làm là đọc các tài liệu PHP cho đối tượng DateTime. Tôi đã chỉnh sửa bài viết của mình để làm cho nó rõ ràng hơn. Đối tượng DateTime là cách để đi trong PHP và tất cả những người mới nên được khuyến khích sử dụng nó. Tuy nhiên, tôi là người duy nhất cung cấp câu trả lời đó. Btw Tôi thấy nhận xét của bạn hơi hung hăng và không hoàn toàn theo tinh thần SO.
alcoholvicar

@Ahmetvardar Xem bản chỉnh sửa của tôi mặc dù tất cả điều này nằm trong các tài liệu PHP mà tôi đã cung cấp một liên kết. Tôi đặc biệt khuyên bạn nên bắt đầu sử dụng đối tượng DateTime. Nó cung cấp hỗ trợ tuyệt vời cho ngày / lần bao gồm cả múi giờ, v.v.
alcoholvicar

18

Điều rất quan trọng là đặt múi giờ mặc định để có kết quả chính xác

<?php
// set default timezone
date_default_timezone_set('Europe/Berlin');

// timestamp
$timestamp = 1307595105;

// output
echo date('d M Y H:i:s Z',$timestamp);
echo date('c',$timestamp);
?> 

Trợ giúp chuyển đổi trực tuyến: http://freeonlinetools24.com/timestamp


2
Trong ISO8601, Zđược sử dụng để chỉ ra rằng đó là thời gian UTC, vì vậy múi giờ nên được đặt thànhUTC
Gert van den Berg

11
<?php
$timestamp=1486830234542;
echo date('Y-m-d H:i:s', $timestamp/1000);
?>

6
Hoạt động mà không có phần chia.
Mặt


1

Tôi thấy thông tin trong cuộc trò chuyện này hữu ích đến mức tôi chỉ muốn thêm cách tôi tìm ra nó bằng cách sử dụng dấu thời gian từ cơ sở dữ liệu MySQL của tôi và một ít PHP

 <?= date("Y-m-d\TH:i:s\+01:00",strtotime($column['loggedin'])) ?>

Đầu ra là: 2017-03-03T08: 22: 36 + 01: 00

Cảm ơn rất nhiều Stewe bạn trả lời là một eureka cho tôi.


0

Bạn có thể làm như .....

$originalDate = "1585876500";

echo $newDate = date("Y-m-d h:i:sa", date($originalDate));
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.