Mendapatkan stempel waktu untuk hari ini pada tengah malam?
123
Bagaimana saya mendapatkan stempel waktu di php untuk hari ini pada tengah malam. Katakanlah sekarang hari senin jam 5 sore dan saya ingin cap waktu untuk hari senin (hari ini) pada tengah malam (jam 12 siang) yang sudah terjadi.
Tengah malam bukanlah pagi atau malam. Juga secara teknis, tidak ada cap waktu untuk tengah malam.
hakre
16
@hakre Saya tidak setuju dengan Anda. Tengah malam adalah pagi dan apa pun format stempel waktu, ada nilai untuk tengah malam.
G-Nugget
1
jika 00:00:00 dipertimbangkan hari ini atau besok. Tengah malam hari ini, sudah di belakang kita, hampir sepanjang waktu, secara teknis. Anda ingin 23:59:59 "malam ini", atau 00:00:00 "tengah malam hari ini, yaitu besok", kurang lebih.
sela
5
waktu 00:00:00 akan menjadi tengah malam hari ini karena berapa lama pun waktu yang dibutuhkan untuk sampai ke 00:00:00 yang sudah terjadi. dimana 23:59:59 akan menjadi malam ini. Jika Anda berbicara dalam istilah hari ini. Tengah malam adalah AM.
Nazca
4
00:00 adalah tengah malam di awal hari, 24:00 adalah tengah malam di penghujung hari. Untuk kesederhanaan, kebanyakan jam digital melewati pukul 24:00 - menyatakan bahwa tengah malam adalah awal dari hari yang baru. Yakni 8 Feb 24:00 dan 9 Feb 00:00 dalam praktiknya adalah titik waktu yang sama.
@ SamHuckaby: Ini bahkan lebih mudah: $timestamp = strtotime('today');tengah malam. Tapi pssst yang di atas terlihat lebih keren sebagai jawaban atas pertanyaan;)
hakre
Saya sebenarnya harus mulai hari ini dan tengah malam hari ini. Bagaimana saya dapat menemukan awal hari ini yang saya maksud untuk 00:00:00
Happy Coder
3
@ AlwinAugustin: Anda harus mempertimbangkan untuk membedakan kata-kata Anda. Tengah malam secara teknis antara dua hari. Jadi ada yang agak "tidak ada hari ini lagi". Juga: Tengah hari hari ini (menurut definisi) adalah (tepat sebelum) dimulainya hari ini. Yang Anda maksud mungkin tengah malam berikutnya setelah hari ini tengah hari .
hakre
ya sebenarnya yang saya butuhkan adalah 00:00:00 hari ini dan 23:59:59 hari ini
Happy Coder
2
Ingatlah bahwa ini akan menghasilkan tengah malam zona waktu server PHP Anda, bukan UTC + 0 ! Untuk mendapatkan UTC + 0 Anda bisa menggunakan strtotime('today+00:00').
mae
73
Saya pikir Anda harus menggunakan objek PHP DateTime baru karena tidak ada masalah melakukan tanggal di luar batasan 32 bit yang dimiliki strtotime (). Berikut adalah contoh bagaimana Anda mendapatkan tanggal hari ini pada tengah malam.
$today =newDateTime();
$today->setTime(0,0);
Atau jika Anda menggunakan PHP 5.4 atau yang lebih baru, Anda dapat melakukannya dengan cara ini:
$today =(newDateTime())->setTime(0,0);
Kemudian Anda dapat menggunakan echo $today->format('Y-m-d');untuk mendapatkan format yang Anda inginkan sebagai keluaran objek.
Saya juga lebih suka menggunakan objek DateTime baru. Jika Anda menggabungkan jawaban ini dengan @ hakr's, Anda mendapatkan:, new DateTime('today midnight')yang membuat maksudnya lebih jelas (tapi ini tentu saja masalah selera).
Martijn
1
Saya melakukan pekerjaan ORM SQL dan saya harus menggunakan objek DateTime untuk perbandingan. Inilah yang saya cari. +1
NobleUplift
Mungkin$today = new DateTime('today')
ProgZi
Juga berguna jika Anda menggunakan Carbon, yang diwarisi dari DateTime. Jadi, Anda juga dapat melakukannya new Carbon('today midnight')dan kemudian Anda dapat menggunakan semua bahan Karbon seperti ->subDays(6). Lihat carbon.nesbot.com
Christopher K.
Mengenai batasan 32 bit: PHP docu untuk strtotime menyatakan : "Untuk versi 64-bit PHP, rentang valid dari timestamp secara efektif tidak terbatas, karena 64 bit dapat mewakili sekitar 293 miliar tahun di kedua arah." Jadi itu hanya berlaku untuk php 32bit.
Anda ingin menghitung waktu peristiwa langit terbaru saat matahari telah lewat tepat di bawah kaki Anda, disesuaikan dengan konvensi lokal untuk menandai tengah hari dan juga berpotensi menyesuaikan sehingga orang memiliki cukup siang hari yang tersisa setelah pulang kerja, dan untuk pertimbangan politik lainnya.
Menakutkan kan? Sebenarnya ini adalah masalah umum tetapi jawaban lengkapnya bergantung pada lokasi:
$zone =new \DateTimeZone('America/New_York');// Or your own definition of “here”
$todayStart =new \DateTime('today midnight', $zone);
$timestamp = $todayStart->getTimestamp();
Apa yang saya lakukan adalah menggunakan fungsi tanggal PHP untuk mendapatkan tanggal hari ini tanpa referensi ke waktu, dan kemudian meneruskannya ke fungsi 'string to time' yang mengubah tanggal dan waktu menjadi stempel waktu epoch. Jika tidak mendapat waktu, itu mengasumsikan detik pertama hari itu.
Apakah ada format tertentu yang diminta OP? Jika demikian, saya akan dengan senang hati mengubah posting saya untuk mengembalikan format apa pun yang mereka inginkan.
SamHuckaby
benar-benar terabaikan strtotime(), pikiran begitu terfokus pada fungsi tanggal. Permintaan maaf.
sela
2
Dengan cara yang lebih objek:
$today =new \DateTimeImmutable('today');
contoh:
echo (new \DateTimeImmutable('today'))->format('Y-m-d H:i:s');// will output: 2019-05-16 00:00:00
dan:
echo (new \DateTimeImmutable())->format('Y-m-d H:i:s');
echo (new \DateTimeImmutable('now'))->format('Y-m-d H:i:s');// will output: 2019-05-16 14:00:35
$midnight = strtotime('midnight');valid Anda juga dapat mencoba
strtotime('12am')atau strtotime('[input any time you wish to here. e.g noon, 6pm, 3pm, 8pm, etc]'). Saya melewatkan menambahkan hari ini sebelum tengah malam karena defaultnya adalah hari ini.
Jawaban:
Anda mungkin ingin melihat apa yang ditawarkan PHP: http://php.net/datetime
sumber
$timestamp = strtotime('today');
tengah malam. Tapi pssst yang di atas terlihat lebih keren sebagai jawaban atas pertanyaan;)strtotime('today+00:00')
.Saya pikir Anda harus menggunakan objek PHP DateTime baru karena tidak ada masalah melakukan tanggal di luar batasan 32 bit yang dimiliki strtotime (). Berikut adalah contoh bagaimana Anda mendapatkan tanggal hari ini pada tengah malam.
Atau jika Anda menggunakan PHP 5.4 atau yang lebih baru, Anda dapat melakukannya dengan cara ini:
Kemudian Anda dapat menggunakan
echo $today->format('Y-m-d');
untuk mendapatkan format yang Anda inginkan sebagai keluaran objek.Objek DateTime PHP
sumber
new DateTime('today midnight')
yang membuat maksudnya lebih jelas (tapi ini tentu saja masalah selera).$today = new DateTime('today')
new Carbon('today midnight')
dan kemudian Anda dapat menggunakan semua bahan Karbon seperti->subDays(6)
. Lihat carbon.nesbot.comHari ini tengah malam. Mudah.
sumber
Anda ingin menghitung waktu peristiwa langit terbaru saat matahari telah lewat tepat di bawah kaki Anda, disesuaikan dengan konvensi lokal untuk menandai tengah hari dan juga berpotensi menyesuaikan sehingga orang memiliki cukup siang hari yang tersisa setelah pulang kerja, dan untuk pertimbangan politik lainnya.
Menakutkan kan? Sebenarnya ini adalah masalah umum tetapi jawaban lengkapnya bergantung pada lokasi:
Definisi potensial dari "di sini" tercantum di https://secure.php.net/manual/en/timezones.php
sumber
strtotime('America/New_York today midnight');
? - 3v4l.org/I85qDharus memberikan apa yang Anda cari.
penjelasan
Apa yang saya lakukan adalah menggunakan fungsi tanggal PHP untuk mendapatkan tanggal hari ini tanpa referensi ke waktu, dan kemudian meneruskannya ke fungsi 'string to time' yang mengubah tanggal dan waktu menjadi stempel waktu epoch. Jika tidak mendapat waktu, itu mengasumsikan detik pertama hari itu.
Referensi: Fungsi Tanggal: http://php.net/manual/en/function.date.php
String To Time: http://us2.php.net/manual/en/function.strtotime.php
sumber
strtotime()
, pikiran begitu terfokus pada fungsi tanggal. Permintaan maaf.Dengan cara yang lebih objek:
contoh:
dan:
sumber
sama dengan
dan sedikit lebih sedikit pekerjaan di server Anda.
sumber
$midnight = strtotime('midnight');
validAnda juga dapat mencoba
strtotime('12am')
ataustrtotime('[input any time you wish to here. e.g noon, 6pm, 3pm, 8pm, etc]')
. Saya melewatkan menambahkan hari ini sebelum tengah malam karena defaultnya adalah hari ini.sumber
Jika Anda menggunakan Karbon, Anda dapat melakukan hal berikut. Anda juga dapat memformat tanggal ini untuk menyetel
Expire
Header HTTP.sumber
Jawaban yang Diperbarui pada 19 April, 2020
Sederhananya kita bisa melakukan ini:
$today = date('Y-m-d 00:00:00');
sumber
sumber