php kullanarak dünün tarihini nasıl alabilirim?


93

Dün tarihi php'de belirli bir tarih biçimini kullanarak almak istiyorum, bu biçim şu şekildedir:

$today = date("d.m.Y"); //15.04.2013

Mümkün mü?

Değiştirilmeleri gerekiyorsa ay ve yılları dikkate alın.


1
tarih ("dmy", saat () - 60 * 60 * 24);
NINCOMPOOP

çözümümü denedin mi? bu değişen aylarda da işe yarayacak
Fabio

üstümdeki "noob" kullanıcı adının yorumuna iyi bir anlam kattığı mükemmel an :)
STT LCU

Yanıtlar:


268

oraya gidiyorsun

date('d.m.Y',strtotime("-1 days"));

bu ay değiştiğinde de işe yarayacak


Küçük bir nit-pick: Eğer bu süre DST-değişimini kapsıyorsa, fonksiyonunuz gece yarısına yakın bir zamanda sorun yaşar. Açıkça öğle vakti gitmek yardımcı olur.
Deduplicator

1
Yanlış . DST ile ilgili 3 şey: 1 sunucu saatine bağlıdır, eğer sunucu doğru zaman dilimine sahipse işlevimi etkilemez. 2 Tüm dünya DST'den etkilenmiyor, onu kullanmayan yerler var. 3 yerlerin çoğu günün ilk saatlerinde (2 veya 3 gibi) zamanı değiştirmek için kullanır, böylece değişen bir günü etkilemez.
Fabio

1
1. Yani bu işlev bir günün 24 saatten farklı olabileceğini biliyor ve dikkate alıyor? 2. Bozuk bir saat bile günde iki kez doğrudur. 3. Çalınan / çoğaltılan kesin saat, hesaplama için o kadar önemli değildir.
Deduplicator

1
DST saati değiştirene ve sunucu saati 2'ye göre değiştirene kadar günde bir anlam 1 24'ten başka değildir elbette ama bu 3. nokta değil bu çok önemli, saat gece yarısı değişirse fikriniz doğru olabilir, başka saatlerde değil
Fabio

7

bunu yapabilirsin

date("F j, Y", time() - 60 * 60 * 24);

veya tarafından

date("F j, Y", strtotime("yesterday"));

3
Gün ışığından yararlanma garantisi verilmez ... insanlar bugünlerde gerçekten DateTime nesnelerini kullanmalı
Mark Baker

UTC saatinde çalışıyorsa iyi çalışır. date_default_timezone_set ('UTC');
Patrick

7

Aşama 1

Date () işlevinde biçim verisini ayarlamamız gerekir: İşlev date (), verilen tamsayı zaman damgasını veya zaman damgası verilmemişse geçerli saati kullanarak verilen biçim dizesine göre biçimlendirilmiş bir dize döndürür. Başka bir deyişle, zaman damgası isteğe bağlıdır ve zaman () değerine varsayılan olur.

<?php
echo date("F j, Y");
?>

sonuç: 30 Mart 2010

Adım 2

"Dün" tarihi için php işlevini kullanın mktime (): İşlev mktime (), verilen argümanlara karşılık gelen Unix zaman damgasını döndürür. Bu zaman damgası, Unix Epoch (1 Ocak 1970 00:00:00 GMT) ile belirtilen saat arasındaki saniye sayısını içeren uzun bir tamsayıdır. Sağdan sola doğru sırayla argümanlar dışarıda bırakılabilir; atlanan herhangi bir argüman, yerel duruma ve zamana göre mevcut değere ayarlanacaktır.

<?php
echo mktime(0, 0, 0, date("m"), date("d")-1, date("Y"));
?>

sonuç: 1269820800

Aşama 3

Şimdi hepsini birleştirin ve şuna bakın:

<?php
$yesterday = date("Y-m-d", mktime(0, 0, 0, date("m") , date("d")-1,date("Y")));
echo $yesterday;
?>

sonuç: 29 Mart 2010

Benzer şekilde çalışarak, saati geri almak mümkündür.

<?php
$yesterday = date("H:i:s",mktime(date("H"), 0, 0, date("m"),date("d"), date("Y")));
echo $yesterday;
?>

sonuç: 20:00:00

veya 7 gün önce:

<?php
$week = date("Y-m-d",mktime(0, 0, 0, date("m"), date("d")-7,date("Y")));
echo $week;
?>

sonuç: 2010-03-23


7

bunu dene

        $tz    = new DateTimeZone('Your Time Zone');
        $date  = new DateTime($today,$tz);
        $interval = new DateInterval('P1D');
        $date->sub($interval); 

        echo $date->format('d.m.y');

        ?>           

bu php.net/manual/en/book.datetime.php 'ye bakın .. Bu, ay değişikliğinde de işe yarayacaktır
zaman

10
yeni DateTime ('yesterday')
Virgili Garcia

1
$ dün = new DateTime ('dün', yeni DateTimeZone ('Sizin Saat Diliminiz'));
miralong

Bu yalnızca kod yanıtıyla ilgili biraz açıklama yapmak güzel olurdu.
mickmackusa


4

PHP uygulamanızda saat dilimini tanımlarsanız (yapmanız gerektiği gibi), bunu şu şekilde yapabilirsiniz:

date_default_timezone_set('Europe/Paris');

O zaman bu kadar basit:

$yesterday = new DateTime('yesterday'); // will use our default timezone, Paris
echo $yesterday->format('Y-m-d'); // or whatever format you want

(Varsayılan saat diliminizi saklamak için bir sabit veya ortam değişkeni tanımlamak isteyebilirsiniz.)


2

bunu dene

<?php
$yesterday = date(“d.m.Y”, time()-86400);
echo $yesterday;

3
Gün ışığından yararlanma nedeniyle bir gün her zaman 86400 saniyeye sahip değildir! Yani bu hesaplama yılda iki kez yanlış olabilir!
sbrbot

... ve artık saniyeler nedeniyle.
Sebastian Mach

1

Tam saati ayarlayarak DateTime için başka bir OOP yöntemi:

$yesterday = new DateTime("yesterday 09:00:59", new DateTimeZone('Europe/London'));
echo $yesterday->format('Y-m-d H:i:s') . "\n";

0

Bunu Carbon kitaplığını kullanarak da yapabilirsiniz :

Carbon::yesterday()->format('d.m.Y');         // '26.03.2019'

Diğer formatlarda:

Carbon::yesterday()->toDateString();          // '2019-03-26'
Carbon::yesterday()->toDateTimeString();      // '2019-03-26 00:00:00'

Carbon::yesterday()->toFormattedDateString(); // 'Mar 26, 2019'
Carbon::yesterday()->toDayDateTimeString();   // 'Tue, Mar 26, 2019 12:00 AM'
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.