Mengonversi Stempel Waktu UNIX ke String Tanggal yang Diformat

183

Dengan menggunakan PHP, saya ingin mengonversi stempel waktu UNIX ke string tanggal yang serupa dengan ini: 2008-07-17T09:24:17Z

Bagaimana cara mengonversi stempel waktu seperti 1333699439menjadi 2008-07-17T09:24:17Z?

Utku Dalmaz
sumber

Jawaban:

321

Coba gmdateseperti ini:

<?php
$timestamp=1333699439;
echo gmdate("Y-m-d\TH:i:s\Z", $timestamp);
?>
pelayan
sumber
53
Harap jangan gmdate()mengembalikan tanggal / waktu dalam GMT. date()akan mengembalikan tanggal / waktu setempat.
Matt K
5
Komentar di atas tidak masuk akal dalam konteks ini. Menggunakan tanggal dengan parameter kedua sebagai stempel waktu, seperti ditunjukkan dalam jawaban, tidak akan mencetak tanggal dalam zona waktu lokal. Tanggal akan dicetak dengan info zona waktu diabaikan, karena stempel waktu tidak memiliki info zona waktu. gmdate dan tanggal dengan parameter cap waktu kedua sebagai 1333699439 akan mencetak waktu tanggal yang sama.
Tinus Tate
1
@MattK: Masuk akal, karena Z mengindikasikan UTC. Tinus: Stempel waktu Unix tidak mengandung offset zona waktu. datedan gmdatekeluaran akan berbeda berdasarkan pada variabel TZ (setidaknya pada * nix)
Gert van den Berg
Akan lebih baik jika jawaban ini termasuk solusi untuk masalah yang berlawanan, mengubah tanggal yang diformat menjadi waktu UNIX.
Olle Härstedt
117

gunakan fungsi tanggal date ( string $format [, int $timestamp = time() ] )

Gunakan date('c',time())sebagai format untuk mengonversi ke tanggal ISO 8601 (ditambahkan dalam PHP 5) -2012-04-06T12:45:47+05:30

gunakan date("Y-m-d\TH:i:s\Z",1333699439)untuk mendapatkan2012-04-06T13:33:59Z

Berikut adalah beberapa format yang didukung fungsi tanggal

<?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
?>
Sandeep Manne
sumber
bagaimana saya bisa mengubah cap waktu tertentu dengan 'c'? misalnya 1333699439
Utku Dalmaz
ini tidak bekerja tanggal ("Ymd \ TH: i: s \ Z", 1333699439) saya mendapat 2012-04-06EDT04: 03: 59-14400
Utku Dalmaz
@Ahmet - Perhatikan penggunaan tanda kutip ganda dan tunggal saat mendefinisikan string
Mark Baker
1
@ user2060451 apa pun yang diawali dengan backslash ditampilkan sebagai karakter literal dalam string waktu yang dihasilkan
verbumSapienti
1
@ user2060451: Z seharusnya menunjukkan waktu UTC (dalam hal ini gmdate harus digunakan ...) Periksa info ISO8601 pada sumber daya penelitian favorit Anda.
Gert van den Berg
56

Dengan asumsi Anda menggunakan PHP5.3 maka cara modern menangani tanggal adalah melalui kelas DateTime asli . Untuk mendapatkan waktu saat ini Anda bisa menelepon

$currentTime = new DateTime();

Untuk membuat objek DateTime dari cap waktu tertentu (yaitu tidak sekarang)

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

Untuk mendapatkan string yang diformat, Anda dapat menelepon

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

Lihat halaman manual di sini

liquorvicar
sumber
1
bagaimana saya bisa mengubah cap waktu khusus dengan ini? misalnya 1333699439
Utku Dalmaz
@Norse Tentu saja saya membaca postingnya. Semua info yang dia butuhkan ada di posting saya. Yang harus dia lakukan adalah membaca dokumen PHP untuk objek DateTime. Saya telah mengedit posting saya untuk membuatnya lebih jelas. Objek DateTime adalah cara untuk masuk dalam PHP dan semua pemula harus didorong untuk menggunakannya. Sampai sekarang, saya satu-satunya yang memberikan jawaban itu. Btw saya menemukan komentar Anda sedikit agresif dan tidak cukup dalam semangat SO.
liquorvicar
@Ahmetvardar Lihat hasil edit saya meskipun semua ini ada dalam dokumen PHP yang saya berikan tautannya. Saya sangat menyarankan Anda untuk mulai menggunakan objek DateTime. Ini memberikan dukungan luar biasa untuk tanggal / waktu termasuk zona waktu dll
liquorvicar
18

Sangat penting untuk menetapkan zona waktu default untuk mendapatkan hasil yang benar

<?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);
?> 

Bantuan konversi online: http://freeonlinetools24.com/timestamp

klit67
sumber
2
Dalam ISO8601, Zdigunakan untuk menunjukkan bahwa itu adalah waktu UTC, sehingga zona waktu harus diatur keUTC
Gert van den Berg
11
<?php
$timestamp=1486830234542;
echo date('Y-m-d H:i:s', $timestamp/1000);
?>
sunil
sumber
6
Bekerja tanpa bagian pemisah. Kalau tidak, tanggalnya adalah 1970.
Script47
6
$unixtime_to_date = date('jS F Y h:i:s A (T)', $unixtime);

Ini seharusnya berhasil.

Linus Gudn Jokela
sumber
1

Saya menemukan informasi dalam percakapan ini sangat membantu sehingga saya hanya ingin menambahkan bagaimana saya mengetahuinya dengan menggunakan timestamp dari database MySQL saya dan sedikit PHP

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

Outputnya adalah: 2017-03-03T08: 22: 36 + 01: 00

Terima kasih banyak Stewe, jawaban Anda adalah eureka untuk saya.

Samuel Ramzan
sumber
0

Anda dapat melakukan seperti .....

$originalDate = "1585876500";

echo $newDate = date("Y-m-d h:i:sa", date($originalDate));
Abhishek Gupta
sumber