PHPを使用して昨日の日付を取得する方法は?


90

PHPで特定の日付形式を使用して昨日の日付を取得したいのですが、これは次の形式です。

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

出来ますか?

それぞれ変更する必要がある場合は、月と年を考慮してください。


1
date( "dmy"、time()-60 * 60 * 24);
NINCOMPOOP 2013

私の解決策を試しましたか?これは月の変化にも対応します
Fabio

私の上のユーザー名「noob」がコメントに良い意味を追加する完璧な瞬間:)
STT LCU 2013

回答:


262

そこに行きます

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

これは月が変わっても機能します


ちょっとした問題:深夜0時近くにDSTの変更が行われると、関数で問題が発生します。明示的に正午を超えると、そこで役立ちます。
deduplicator 2014年

1
間違っています。DSTに関する3つのこと:1サーバーの時間に依存します。サーバーのタイムゾーンが正しい場合、機能に影響はありません。2全世界がDSTの影響を受けるわけではなく、DSTを使用しない場所もあります。3ほとんどの場所は、1日の最初の時間(午前2時や3時など)に時間を変更するために使用するため、変更日に影響を与えることはありません。
ファビオ

1
1.その関数は、1日が24時間以外になる可能性があることを認識し、注意を払っていますか?2.壊れた時計でも1日2回正しいです。3.盗まれた/複製された正確な時間は、計算にとってそれほど重要ではありません。
deduplicator 2014年

1
無感1日ではない、他の24よりもそれまではDSTの変更時間があると、サーバはそれが当然のことながら、時間に従って2を変更しますが、あなたのアイデアが可能であることは、これは非常に重要な代わりではありませんポイント3右で深夜の時間変化であれば、他の時間ではありません
Fabio

7

あなたはこれを行うことができます

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

またはによって

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

3
日光の節約で保証されていません...人々は本当に最近DateTimeオブジェクトを使用する必要があります
Mark Ba​​ker

UTC時間で動作している場合は、正常に動作します。date_default_timezone_set( 'UTC');
パトリック

7

ステップ1

関数date()にフォーマットデータを設定する必要があります。関数date()は、指定された整数のタイムスタンプ、またはタイムスタンプが指定されていない場合は現在の時刻を使用して、指定されたフォーマット文字列に従ってフォーマットされた文字列を返します。つまり、timestampはオプションであり、デフォルトはtime()の値です。

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

結果:2010年3月30日

ステップ2

「昨日」の日付には、php関数mktime()を使用します。関数mktime()は、指定された引数に対応するUnixタイムスタンプを返します。このタイムスタンプは、Unixエポック(1970年1月1日00:00:00 GMT)から指定された時刻までの秒数を含む長整数です。引数は、右から左の順に省略できます。したがって省略された引数は、localdateとtimeに従って現在の値に設定されます。

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

結果:1269820800

ステップ3

今、すべてをマージし、これを見てください:

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

結果:2010年3月29日

同様に動作することで、時間の戻りを受け取ることができます。

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

結果:20:00:00

または7日前:

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

結果:2010-03-23


7

これを試して

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

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

        ?>           

このphp.net/manual/en/book.datetime.phpを参照してください'..これは月の変更でも機能します
常に2013

9
new DateTime( 'yesterday')
Virgili Garcia 2015

$ yesterday = new DateTime( 'yesterday'、new DateTimeZone( 'Your Time Zone'));
miralong 2017年

このコードのみの答えで少し説明するといいでしょう。
mickmackusa 2017


3

PHPアプリでタイムゾーンを定義する場合(必要に応じて)、次のように行うことができます。

date_default_timezone_set('Europe/Paris');

次に、それは次のように簡単です。

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

(デフォルトのタイムゾーンを保存するために、定数または環境変数を定義することをお勧めします。)


2

これを試して

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

3
夏時間のため、1日は必ずしも86400秒とは限りません。したがって、この計算は年に2回間違っている可能性があります。
sbrbot 2014

...そしてうるう秒のため。
セバスチャンマッハ

1

正確な時間を設定するDateTimeの別のOOPメソッド:

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

0

Carbonライブラリを使用してこれを行うこともできます。

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

他の形式:

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'
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.