Mengubah tanggal (dengan milidetik) menjadi stempel waktu

Saya memiliki format tanggal seperti '25 May 2016 10:45:53:567'.

Saya ingin mengubahnya menjadi cap waktu.

Fungsi strtotime kembali kosong.

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

Saat saya menghapus milidetik, itu berhasil.

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

Tolong selesaikan masalah saya. Terima kasih sebelumnya.


person Tamilvanan    schedule 28.05.2016    source sumber
comment
stempel waktu - alco disebut unixtime, detik-detik berlalu sejak 1 Januari 1970. Detik !! Bukan milidetik. Anda tidak dapat melakukannya menggunakan strtotime .   -  person Michał G    schedule 28.05.2016
comment
Stempel waktu adalah detik yang berlalu sejak 1 Januari 1970. Stempel tersebut disimpan dalam bilangan bulat. Anda tidak dapat menyimpan (atau mengonversi) milidetik dalam stempel waktu. Tapi Anda bisa mengubahnya menjadi dua variabel.   -  person Prokhor Sednev    schedule 28.05.2016
comment
Saya mendapatkan poin Anda @MichałG & Prokthor. Saya akan membagi bidang saya menjadi dua. Satu untuk tanggal dengan waktu dan satu lagi untuk milidetik.   -  person Tamilvanan    schedule 28.05.2016
comment
@John Conde Tidak ada yang mendiskusikan atau bertanya tentang milidetik pada stempel waktu tanggal atau waktu mikro dalam pertanyaan itu (stackoverflow.com/questions/2167916/). Lalu bagaimana pertanyaan ini menjadi duplikat?   -  person Tamilvanan    schedule 28.05.2016
comment
@tamilvanan: Disebutkan dalam jawaban yang diposting oleh John Conde.   -  person Nisse Engström    schedule 28.05.2016
comment
@NisseEngström : Dalam jawaban itu, Milidetik dipangkas dari cap waktu tanggal yang diberikan. Itu bukan jawaban pasti saya. Tapi itu referensi yang bagus   -  person Tamilvanan    schedule 30.05.2016


Jawaban (3)


Pisahkan tali:

$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
Saya akan menggunakan metode Anda. Saya ingin tahu tentang ekspresi reguler Anda. Bisakah Anda memberi tahu cara kerjanya? - person Tamilvanan; 28.05.2016
comment
^ - awal string, (.+) - menangkap grup semua simbol, : - simbol ':', (\d+) - menangkap grup digit $ - akhir string. Cukup mudah. Saya akan merekomendasikan penggunaan situs regex101.com - Anda dapat membuat regexp dan mengujinya dengan mudah di sana. - person Prokhor Sednev; 28.05.2016

Gunakan 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
Terima kasih. Saya mendapat hasil yang sama dengan dan tanpa milidetik. Apa alasannya ? - person Tamilvanan; 28.05.2016
comment
Dengan milidetik $date1 = DateTime::createFromFormat('d M Y H:i:s:u', '25 Mei 2016 10:45:53:567'); echo $tanggal1-›getTimestamp(); // 1464153353 Tanpa milidetik $date2 = DateTime::createFromFormat('d M Y H:i:s', '25 Mei 2016 10:45:53'); echo $tanggal2-›getTimestamp(); // 1464153353 (Dalam waktu lokal saya) - person Tamilvanan; 28.05.2016
comment
Saya telah memperbarui jawaban. Umumnya stempel waktu adalah nilai Integer. - person Pyton; 28.05.2016

Gunakan Datetime alih-alih tanggal dan 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

Contoh

person Community    schedule 28.05.2016