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.

Terima kasih


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.
Johan

Jawaban:


239
$timestamp = strtotime('today midnight');

Anda mungkin ingin melihat apa yang ditawarkan PHP: http://php.net/datetime


52
@ 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 = new DateTime();
$today->setTime(0,0);

Atau jika Anda menggunakan PHP 5.4 atau yang lebih baru, Anda dapat melakukannya dengan cara ini:

$today = (new DateTime())->setTime(0,0);

Kemudian Anda dapat menggunakan echo $today->format('Y-m-d');untuk mendapatkan format yang Anda inginkan sebagai keluaran objek.

Objek DateTime PHP


14
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.
Christopher K.


7

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

Definisi potensial dari "di sini" tercantum di https://secure.php.net/manual/en/timezones.php


Suka strtotime('America/New_York today midnight');? - 3v4l.org/I85qD
hakre

5
$today_at_midnight = strtotime(date("Ymd"));

harus 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


cap waktu? Itu hanya kencan.
sela

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

1
$timestamp = strtotime('today midnight');

sama dengan

$timestamp = strtotime('today');

dan sedikit lebih sedikit pekerjaan di server Anda.


0

$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.


0

Jika Anda menggunakan Karbon, Anda dapat melakukan hal berikut. Anda juga dapat memformat tanggal ini untuk menyetel ExpireHeader HTTP.

Carbon::parse('tomorrow midnight')->format(Carbon::RFC7231_FORMAT)

0

Jawaban yang Diperbarui pada 19 April, 2020

Sederhananya kita bisa melakukan ini:

$today = date('Y-m-d 00:00:00');


-1

function getTodaysTimeStamp() {
  const currentTimeStamp = Math.round(Date.now() / 1000);
  const startOfDay = currentTimeStamp - (currentTimeStamp % 86400);
  return { startOfDay, endOfDay: startOfDay + 86400 - 1 };
}

// starts from sunday
function getThisWeeksTimeStamp() {
  const currentTimeStamp = Math.round(Date.now() / 1000);
  const currentDay = new Date(currentTimeStamp * 1000);
  const startOfWeek = currentTimeStamp - (currentDay.getDay() * 86400) - (currentTimeStamp % 86400);
  return { startOfWeek, endOfWeek: startOfWeek + 7 * 86400 - 1 };
}


function getThisMonthsTimeStamp() {
  const currentTimeStamp = Math.round(Date.now() / 1000);
  const currentDay = new Date(currentTimeStamp * 1000);
  const startOfMonth = currentTimeStamp - ((currentDay.getDate() - 1) * 86400) - (currentTimeStamp % 86400);
  const currentMonth = currentDay.getMonth() + 1;
  let daysInMonth = 0;
  if (currentMonth === 2) daysInMonth = 28;
  else if ([1, 3, 5, 7, 8, 10, 12].includes(currentMonth)) daysInMonth = 31;
  else daysInMonth = 30;
  return { startOfMonth, endOfMonth: startOfMonth + daysInMonth * 86400 - 1 };
}


console.log(getTodaysTimeStamp());
console.log(getThisWeeksTimeStamp());
console.log(getThisMonthsTimeStamp());


Pertanyaannya berkaitan dengan PHP. Jawaban ini ditulis dalam JavaScript
Electric Coffee
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.