Bugün gece yarısı için bir zaman damgası mı alıyorsunuz?


124

Bugün gece yarısı için php'de bir zaman damgası almaya nasıl devam ederdim? Pazartesi 5 PM olduğunu varsayalım ve Pazartesi (bugün) gece yarısı (12 am) için Zaman Damgasını istiyorum ki bu zaten gerçekleşmiş.

teşekkür ederim


Gece yarısı am ne de pm. Ayrıca teknik olarak, gece yarısı için zaman damgası yoktur.
hakre

16
@hakre sana katılmıyorum. Gece yarısı am ve zaman damgası hangi formatta olursa olsun, gece yarısı için bir değer vardır.
G-Nugget

1
00:00:00 bugün veya yarın düşünülürse. Bugün gece yarısı, teknik olarak, neredeyse her zaman arkamızda. 23:59:59 "bu gece" veya 00:00:00 "bugünün gece yarısı, yani yarın" olsun, aşağı yukarı.
wesside

5
00:00:00 saati bugünün gece yarısı olurdu, çünkü zaten olmuş olan 00:00:00 'a ulaşmak için ne kadar zaman alırsa alsın. 23:59:59 bu gece nerede olacak. Bugün açısından konuşursanız. Gece yarısı AM.
Nazca

4
00:00, günün başında gece yarısı, 24:00 ise günün sonunda gece yarısıdır. Ancak basitlik açısından çoğu dijital saat 24: 00'ü atlayarak gece yarısının yeni bir günün başlangıcı olduğunu bildirir. Yani 8 Şubat 24:00 ve 9 Şubat 00:00 pratikte aynı zamandadır.
Johan

Yanıtlar:


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

PHP'nin sunduklarına bir göz atmak isteyebilirsiniz: http://php.net/datetime


52
@SamHuckaby: Daha da kolay: $timestamp = strtotime('today');gece yarısı. Ama pssst soruya cevap olarak daha havalı görünüyor;)
hakre

Aslında bugünden ve bugünün gece yarısına başlamalıyım. Bugünün başlangıcını nasıl bulabilirim 00:00:00
Happy Coder

3
@AlwinAugustin: İfadelerinizi farklılaştırmayı düşünmelisiniz. Gece yarısı teknik olarak iki gün arasındadır. Yani bir şekilde "bugün yok" var. Ayrıca: Gün ortası (tanım başına) bugünün başlangıcıdır (hemen önce). Muhtemelen bugün öğleden sonraki gece yarısını kastediyorsunuz .
hakre

evet aslında ihtiyacım olan bugün 00:00:00 ve bugün 23:59:59
Happy Coder

2
Bunun UTC + 0 değil , PHP sunucunuzun saat diliminin gece yarısını oluşturacağını unutmayın ! UTC + 0'ı almak için kullanabilirsiniz strtotime('today+00:00').
mae

74

Strtotime () 'ın sahip olduğu 32 bitlik kısıtlamaların ötesinde tarihlerle ilgili herhangi bir sorunu olmadığı için yeni PHP DateTime nesnesini kullanmanız gerektiğini düşünüyorum. İşte bugünün gece yarısı tarihini nasıl alacağınıza dair bir örnek.

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

Veya PHP 5.4 veya sonraki bir sürümünü kullanıyorsanız şu şekilde yapabilirsiniz:

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

Ardından echo $today->format('Y-m-d');, nesne çıktınızın olmasını istediğiniz formatı elde etmek için kullanabilirsiniz .

PHP DateTime Nesnesi


14
Ayrıca yeni DateTime nesnesini kullanmayı tercih ediyorum. Bu yanıtı @ hakr ile birleştirirseniz: elde edersiniz new DateTime('today midnight'), bu da niyeti daha net hale getirir (ama bu elbette bir zevk meselesidir).
Martijn

1
ORM SQL çalışması yapıyorum ve karşılaştırmalar için DateTime nesnesini kullanmak zorunda kaldım. Bu tam olarak aradığım şeydi. +1
NobleUplift

Olabilir$today = new DateTime('today')
ProgZi

Ayrıca, DateTime'dan miras alan Carbon kullanıyorsanız da yararlıdır. Böylelikle siz de yapabilir new Carbon('today midnight')ve daha sonra tüm Karbon gibi şeyleri kullanabilirsiniz ->subDays(6). Bkz carbon.nesbot.com
Christopher .K

32 bit kısıtlamasıyla ilgili olarak: strtotime için PHP dokümanı şu şekildedir : " PHP'nin 64 bit sürümleri için, bir zaman damgasının geçerli aralığı fiilen sonsuzdur, çünkü 64 bit her iki yönde de yaklaşık 293 milyar yılı temsil edebilir." Yani sadece 32bit php için geçerlidir.
Christopher K.

19

Bugün gece yarısı. Kolay.

$stamp = mktime(0, 0, 0);

7

Güneşin doğrudan ayaklarınızın altından geçtiği en son göksel olayın zamanını hesaplamak istiyorsunuz, öğlen saatlerini işaretleyen yerel geleneklere göre ayarlanmış ve ayrıca potansiyel olarak insanların işten eve döndükten sonra yeterli gün ışığına sahip olacak şekilde ayarlanması ve diğer siyasi düşünceler.

Korkunç değil mi? Aslında bu yaygın bir sorundur, ancak tam yanıt konuma bağlıdır:

$zone = new \DateTimeZone('America/New_York'); // Or your own definition of “here”
$todayStart = new \DateTime('today midnight', $zone);
$timestamp = $todayStart->getTimestamp();

"Burada" nın olası tanımları https://secure.php.net/manual/en/timezones.php adresinde listelenmiştir.


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

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

Peşinde olduğun şeyi sana vermelisin.

açıklama

Yaptığım şey, PHP'nin tarih işlevini kullanarak bugünün tarihini zamana herhangi bir gönderme yapmadan almak ve ardından bunu, tarih ve saati bir çağ zaman damgasına dönüştüren 'zaman dizgisi' işlevine geçirmekti. Bir zaman almazsa, o günün ilk saniyesini varsayar.

Referanslar: Tarih Fonksiyonu: http://php.net/manual/en/function.date.php

Zamana Dize: http://us2.php.net/manual/en/function.strtotime.php


Zaman damgası? Bu sadece bir randevu.
wesside

OP'nin istediği belirli bir format var mı? Öyleyse, gönderimi istedikleri herhangi bir biçime döndürmek için memnuniyetle değiştiririm.
SamHuckaby

tamamen gözden kaçan strtotime()zihin, tarih işlevine çok odaklanmıştı. Özür.
wesside

2

Daha nesnel bir şekilde:

$today = new \DateTimeImmutable('today');

misal:

 echo (new \DateTimeImmutable('today'))->format('Y-m-d H:i:s');
// will output: 2019-05-16 00:00:00

ve:

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

aynıdır

$timestamp = strtotime('today');

ve sunucunuzda biraz daha az çalışır.


0

$midnight = strtotime('midnight');geçerlidir
Ayrıca deneyebilirsiniz strtotime('12am')veya strtotime('[input any time you wish to here. e.g noon, 6pm, 3pm, 8pm, etc]'). Bugün gece yarısından önce eklemeyi atladım çünkü varsayılan bugün.


0

Carbon kullanıyorsanız aşağıdakileri yapabilirsiniz. Ayrıca bir ExpireHTTP Başlığı ayarlamak için bu tarihi biçimlendirebilirsiniz .

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

0

19 Nisan 2020'de güncellenmiş cevap

Basitçe bunu yapabiliriz:

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


Soru PHP ile ilgilidir. Bu cevap JavaScript ile yazılmıştır
Electric Coffee
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.