การแปลงเวลาประทับ UNIX เป็นสตริงวันที่จัดรูปแบบ


183

ใช้ PHP ฉันต้องการแปลงเวลาประทับของ UNIX เป็นสตริงวันที่คล้ายกับสิ่งนี้: 2008-07-17T09:24:17Z

ฉันจะแปลงการประทับเวลาเช่น1333699439การ2008-07-17T09:24:17Z?

คำตอบ:


321

ลองgmdateแบบนี้

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

53
โปรดอย่าgmdate()ส่งคืนวันที่ / เวลาใน GMT date()จะส่งคืนวันที่ / เวลาท้องถิ่น
Matt K

5
ความคิดเห็นข้างต้นไม่สมเหตุสมผลในบริบทนี้ การใช้วันที่ที่มีพารามิเตอร์ตัวที่สองเป็นเวลาประทับดังที่แสดงในคำตอบจะไม่พิมพ์วันที่ในเขตเวลาท้องถิ่น วันที่จะถูกพิมพ์โดยไม่มีข้อมูลเขตเวลาทำให้การประทับเวลาไม่มีข้อมูลเขตเวลา gmdate และ date ที่มีพารามิเตอร์การประทับเวลาที่สองเป็น 1333699439 จะพิมพ์เวลาวันที่เดียวกัน
Tinus Tate

1
@MattK: ซึ่งเหมาะสมแล้วเนื่องจาก Z ระบุว่า UTC Tinus: การประทับเวลา Unix ไม่มีการชดเชยเวลา dateและgmdateเอาต์พุตของจะแตกต่างกันไปตามตัวแปร TZ (อย่างน้อย * บน * ระวัง)
Gert van den Berg

คุณสามารถตรวจสอบphpzag.com/convert-unix-timestamp-to-readable-date-time-in-php
Laeeq

มันจะดีถ้าคำตอบนี้รวมถึงการแก้ปัญหาตรงข้ามแปลงวันที่จัดรูปแบบเป็นเวลา UNIX
Olle Härstedt

117

ใช้ฟังก์ชั่นวันที่ date ( string $format [, int $timestamp = time() ] )

ใช้date('c',time())เป็นรูปแบบเพื่อแปลงเป็นวันที่ ISO 8601 (เพิ่มใน PHP 5) -2012-04-06T12:45:47+05:30

ใช้date("Y-m-d\TH:i:s\Z",1333699439)เพื่อรับ2012-04-06T13:33:59Z

นี่คือฟังก์ชั่นสนับสนุนรูปแบบวันที่บางส่วน

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

ฉันจะแปลงเวลาที่ระบุด้วย 'c' ได้อย่างไร ตัวอย่างเช่น 1333699439
Utku Dalmaz

วันนี้ไม่ทำงาน ("Ymd \ TH: i: s \ Z", 1333699439) ฉันได้รับ 2012-04-06EDT04: 03: 59-14400
Utku Dalmaz

@Ahmet - หมายเหตุการใช้เครื่องหมายคำพูดคู่และเดี่ยวเมื่อกำหนดสตริง
Mark Baker

1
@ user2060451 ทุกอย่างที่นำหน้าด้วยแบ็กสแลชแสดงเป็นตัวอักษรในสตริงเวลาที่เกิดขึ้น
verbumSapienti

1
@ user2060451: Z ควรระบุเวลา UTC (ในกรณีที่ควรใช้ gmdate ... ) ตรวจสอบข้อมูล ISO8601 ในแหล่งข้อมูลการวิจัยที่คุณชื่นชอบ
Gert van den Berg

56

สมมติว่าคุณกำลังใช้ PHP5.3 ดังนั้นวิธีการที่ทันสมัยในการจัดการกับวันที่ก็คือผ่านภาษาท้องถิ่น ชั้น DateTime หากต้องการรับเวลาปัจจุบันคุณสามารถโทรได้

$currentTime = new DateTime();

เพื่อสร้างวัตถุ DateTime จากเวลาที่ระบุ (เช่นไม่ใช่ตอนนี้)

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

ในการรับสตริงที่มีการจัดรูปแบบคุณสามารถโทรได้

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

ดูหน้าคู่มือได้ที่นี่


1
ฉันจะแปลงการประทับเวลาเฉพาะด้วยวิธีนี้ได้อย่างไร ตัวอย่างเช่น 1333699439
Utku Dalmaz

@Norse แน่นอนฉันอ่านโพสต์ของเขา ข้อมูลทั้งหมดที่เขาต้องการอยู่ในโพสต์ของฉัน สิ่งที่เขาต้องทำก็คืออ่านเอกสาร PHP สำหรับวัตถุ DateTime ฉันแก้ไขโพสต์ของฉันเพื่อให้ชัดเจนยิ่งขึ้น วัตถุ DateTime เป็นวิธีที่จะไปใน PHP และมือใหม่ทั้งหมดควรได้รับการสนับสนุนให้ใช้ ฉันยังเป็นคนเดียวที่ให้คำตอบนั้น Btw ฉันพบว่าความคิดเห็นของคุณค่อนข้างก้าวร้าวและไม่ได้อยู่ในจิตวิญญาณของ SO
alcoholvicar

@ Ahmetvardar ดูการแก้ไขของฉันแม้ว่าทั้งหมดนี้จะอยู่ในเอกสาร PHP ที่ฉันได้ให้ลิงก์ไว้ ฉันขอแนะนำให้คุณเริ่มใช้วัตถุ DateTime มันให้การสนับสนุนที่ดีเยี่ยมสำหรับวันที่ / เวลารวมถึงเขตเวลาอื่น ๆ
alcoholvicar

18

มันสำคัญมากที่จะต้องตั้งค่าเขตเวลาเริ่มต้นเพื่อให้ได้ผลลัพธ์ที่ถูกต้อง

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

ความช่วยเหลือในการแปลงออนไลน์: http://freeonlinetools24.com/timestamp


2
ใน ISO8601 Zใช้เพื่อระบุว่าเป็นเวลา UTC ดังนั้นควรตั้งค่าเขตเวลาเป็นUTC
Gert van den Berg

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

6
ทำงานได้โดยไม่ต้องแบ่งส่วน มิฉะนั้นวันที่เริ่มต้นที่ 1970
Script47


1

ฉันพบข้อมูลในบทสนทนานี้มีประโยชน์มากและฉันต้องการเพิ่มวิธีคิดออกโดยใช้การประทับเวลาจากฐานข้อมูล MySQL ของฉันและ PHP เล็กน้อย

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

ผลลัพธ์คือ: 2017-03-03T08: 22: 36 + 01: 00

ขอบคุณมากที่คุณตอบสตีเว่นเป็นยูเรก้าสำหรับฉัน


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.