การแปลงวันที่ (เป็นมิลลิวินาที) เป็นการประทับเวลา

ฉันมีรูปแบบวันที่เช่น '25 May 2016 10:45:53:567'.

ฉันต้องการแปลงเป็นการประทับเวลา

ฟังก์ชัน strtotime ส่งคืนค่าว่าง

$date = '25 May 2016 10:45:53:567';
echo strtotime($date); 
// returns empty

เมื่อฉันลบมิลลิวินาทีออกไป มันก็ใช้งานได้

$date = '25 May 2016 10:45:53';
echo strtotime($date);
// returns 1464153353

กรุณาจัดการปัญหาของฉัน ขอบคุณล่วงหน้า.


person Tamilvanan    schedule 28.05.2016    source แหล่งที่มา
comment
การประทับเวลา - alco เรียกว่า unixtime มันเป็นวินาทีที่ผ่านไปตั้งแต่วันที่ 1 มกราคม 1970 วินาที !! ไม่ใช่มิลลิวินาที คุณไม่สามารถทำได้โดยใช้ strtotime   -  person Michał G    schedule 28.05.2016
comment
การประทับเวลาคือวินาทีที่ผ่านไปตั้งแต่วันที่ 1 มกราคม 1970 โดยจะจัดเก็บเป็นจำนวนเต็ม คุณไม่สามารถจัดเก็บ (หรือแปลง) มิลลิวินาทีในการประทับเวลาได้ แต่คุณสามารถแปลงมันเป็นสองตัวแปรได้   -  person Prokhor Sednev    schedule 28.05.2016
comment
ฉันได้รับคะแนนของคุณแล้ว @MichałG & Prokthor ฉันจะแบ่งทุ่งของฉันออกเป็นสองส่วน อันหนึ่งสำหรับวันที่พร้อมเวลา และอีกอันหนึ่งสำหรับมิลลิวินาที   -  person Tamilvanan    schedule 28.05.2016
comment
@John Conde ไม่มีใครพูดคุยหรือถามเกี่ยวกับมิลลิวินาทีในการประทับเวลาวันที่หรือไมโครไทม์ในคำถามนั้น (stackoverflow.com/questions/2167916/) แล้วคำถามนี้ซ้ำซากได้อย่างไร?   -  person Tamilvanan    schedule 28.05.2016
comment
@tamilvanan: มีการกล่าวถึงในคำตอบที่โพสต์โดย John Conde   -  person Nisse Engström    schedule 28.05.2016
comment
@ NisseEngström: ในคำตอบนั้น มิลลิวินาทีจะถูกตัดออกจากการประทับเวลาวันที่ที่กำหนด นั่นไม่ใช่คำตอบที่แน่นอนของฉัน แต่ก็เป็นข้อมูลอ้างอิงที่ดี   -  person Tamilvanan    schedule 30.05.2016


คำตอบ (3)


แยกสตริง:

$date = '25 May 2016 10:45:53:001';
preg_match('/^(.+):(\d+)$/i', $date, $matches);
echo 'timestamp: ' . strtotime($matches[1]) . PHP_EOL;
echo 'milliseconds: ' . $matches[2] . PHP_EOL;
// timestamp: 1464162353 
// milliseconds: 001 
person Prokhor Sednev    schedule 28.05.2016
comment
ฉันจะใช้วิธีของคุณ ฉันอยากรู้เกี่ยวกับการแสดงออกปกติของคุณ คุณช่วยบอกได้ไหมว่ามันทำงานอย่างไร? - person Tamilvanan; 28.05.2016
comment
^ - จุดเริ่มต้นของสตริง (.+) - การจับกลุ่มของสัญลักษณ์ทั้งหมด : - สัญลักษณ์ ':', (\d+) - การจับกลุ่มของตัวเลข $ - จุดสิ้นสุดของสตริง ค่อนข้างง่าย ฉันอยากจะแนะนำให้ใช้ไซต์ regex101.com - คุณสามารถสร้าง regexp และทดสอบได้อย่างง่ายดายที่นั่น - person Prokhor Sednev; 28.05.2016

ใช้ DateTime:

$date = DateTime::createFromFormat('d M Y H:i:s:u', '25 May 2016 10:45:53:000');
echo $date->getTimestamp();
// 1464165953

// With microseconds
echo $date->getTimestamp().'.'.$date->format('u');
// 1464165953.000000
person Pyton    schedule 28.05.2016
comment
ขอบคุณ. ฉันได้ผลลัพธ์เดียวกันทั้งแบบมีและไม่มีมิลลิวินาที สาเหตุคืออะไร? - person Tamilvanan; 28.05.2016
comment
ด้วยมิลลิวินาที $date1 = DateTime::createFromFormat('d M Y H:i:s:u', '25 พฤษภาคม 2559 10:45:53:567'); เสียงสะท้อน $date1->getTimestamp(); // 1464153353 โดยไม่มีมิลลิวินาที $date2 = DateTime::createFromFormat('d M Y H:i:s', '25 May 2016 10:45:53'); เสียงสะท้อน $date2->getTimestamp(); // 1464153353 (ตามเวลาท้องถิ่นของฉัน) - person Tamilvanan; 28.05.2016
comment
ฉันได้อัปเดตคำตอบแล้ว โดยทั่วไปการประทับเวลาจะเป็นค่าจำนวนเต็ม - person Pyton; 28.05.2016

ใช้ Datetime แทนวันที่และ strtotime

//using date and strtotime
$date = '25 May 2016 10:45:53:000';
echo "Using date and strtotime: ".date("Y-m-d H:i:s.u", strtotime($date)); 

echo "\n";\

//using DateTime
$date = new DateTime();
$date->createFromFormat('d M Y H:i:s.u', '25 May 2016 10:45:53:000');
echo "Using DateTime: ".$date->format("Y-m-d H:i:s.u"); 
// since you want timestamp
echo $date->getTimestamp();
// Output
// Using date and strtotime: 1969-12-31 16:00:00.000000
// Using DateTime: 2016-05-28 03:25:22.000000

ตัวอย่าง

person Community    schedule 28.05.2016