DateTimeオブジェクトとしてdate_modifyを使用するPHPの現在の月の最初の日


157

今週の月曜日は次のようにして取得できます。

$monday = date_create()->modify('this Monday');

今月1日も同じように楽にしたいです。どうすればそれを達成できますか?


ええと、困っています。ジョンコンデが答えた質問に答えましたが、5.2で機能する必要があることを忘れてしまったので、実際にはMr-skの答えを使用します...
pihentagy

回答:


260

動作するにはPHP 5.3が必要です(「初日」はPHP 5.3で導入されました)。それ以外の場合は、上記の例がそれを行う唯一の方法です。

<?php
    // First day of this month
    $d = new DateTime('first day of this month');
    echo $d->format('jS, F Y');

    // First day of a specific month
    $d = new DateTime('2010-01-19');
    $d->modify('first day of this month');
    echo $d->format('jS, F Y');

    // alternatively...
    echo date_create('2010-01-19')
      ->modify('first day of this month')
      ->format('jS, F Y');

PHP 5.4以降では、これを行うことができます:

<?php
    // First day of this month
    echo (new DateTime('first day of this month'))->format('jS, F Y');

    echo (new DateTime('2010-01-19'))
      ->modify('first day of this month')
      ->format('jS, F Y');

これを行うための簡潔な方法が必要で、数値に年と月がすでに含まれている場合は、次を使用できますdate()

<?php
    echo date('Y-m-01'); // first day of this month
    echo date("$year-$month-01"); // first day of a month chosen by you

9
今月の->modify()最初の日だけが必要な場合は、通過する必要がないことに注意してください。次のように、DateTimeコンストラクタに直接渡すことができます。ただ言う...'first day of this month'$date = new DateTime('first day of this month')
2015年

333

これが私が使うものです。

月の初日:

date('Y-m-01');

月の最終日:

date('Y-m-t');

10
これは、必要なのが日付の文字列表現だけである場合、これを解決する最も簡単で最も読みやすい方法であるIMOです。
Markus Amalthea Magnuson 2012

5
その後、月の最終日はを使用して取得できますdate('Y-m-t');
Mark Tomlin 2013年

7
参考:日付の「t」(「Ym-t」)は、常にその月の日数を表します。今月の最終日を取得するための素晴らしいシンプルな方法。
Pascal Klein

1
これを使用して曜日を取得しようとするdate('w', '2015-05-01');と、実際の日付ではなく前日になります。(これにより、正しい5ではなく4が得られます)。
PBwebD

5
これは単に素晴らしいです。私が行って、月の時間のための最小値と最大値の境界を与えるためにそれに少し拡大: $monthStart = date('Y-m-01 00:00:00'); $monthEnd = date('Y-m-t 23:59:59');
H2ONOCK

32

これはあなたが必要とするすべてです:

$week_start = strtotime('last Sunday', time());
$week_end = strtotime('next Sunday', time());

$month_start = strtotime('first day of this month', time());
$month_end = strtotime('last day of this month', time());

$year_start = strtotime('first day of January', time());
$year_end = strtotime('last day of December', time());

echo date('D, M jS Y', $week_start).'<br/>';
echo date('D, M jS Y', $week_end).'<br/>';

echo date('D, M jS Y', $month_start).'<br/>';
echo date('D, M jS Y', $month_end).'<br/>';

echo date('D, M jS Y', $year_start).'<br/>';
echo date('D, M jS Y', $year_end).'<br/>';

4
これは適切なソリューションですがstrtotime('first day of this month', time())、最初の日が返され、時間は現在と同じです。それで、それは、その最初の日は0:00でなく、その最初の日であり、現在の時刻であるからです。これはそれを修正しstrtotime('first day of this month 00:00:00', time())ます。
Kalle H.Väravas2014

22

現在、私はこのソリューションを使用しています:

$firstDay = new \DateTime('first day of this month');
$lastDay = new \DateTime('last day of this month');

私が遭遇した唯一の問題は、奇妙な時間が設定されているということです。検索インターフェースの正しい範囲が必要でしたが、次のようになりました。

$firstDay = new \DateTime('first day of this month 00:00:00');
$lastDay = new \DateTime('first day of next month 00:00:00');

これはかっこいいですが、実際の月の最初の日にいくつか問題があります。したがって、今日が9月1日の午前11時である場合。8月1日です!今日が1日かどうかを実際に確認する必要があります。もしそうなら、「今」を使用してください。奇妙な(Php 7.3.9)
ジェイコブ・クリステンセン

@JacobChristensenはまだそれを経験していません。どのように修正しましたか?
Nikola Petkanski、

非常に真実ですが、phpの継ぎ目はこれについてあまりクールではありません。$ n = new \ DateTime( '' first day of '。(new \ DateTime())-> format(' F ')); 「1月の初日」。月曜日であり、それが少しである週に同じことが起こります...イライラする:)
ジェイコブ・クリステンセン


6

PHP 5.2では、次を使用できます。

<? $d = date_create();
print date_create($d->format('Y-m-1'))->format('Y-m-d') ?>

4

醜い(そして上記のメソッド呼び出しを使用しない)が機能します。

echo 'First day of the month: ' . date('m/d/y h:i a',(strtotime('this month',strtotime(date('m/01/y')))));   

トピック外ですが、同じシナリオで月の最終日をどのように計算しますか。
LoneWOLFs

@LoneWOLFs last day of {$month} {$year}またはlast day of this month両方が機能します。ただし、$ monthは、「January」のように「Decemember」と考えられる限り、月の名前を含む文字列でなければならないことに注意してください。または、単にを使用することもできますdate('Y-m-t');
Mark Tomlin 2013年

3

あなたはこのようにそれを行うことができます:

$firstday = date_create()->modify('first day January 2010');

3

これを毎日のcronジョブで使用して、任意の月の最初の日にアフィリエイトにメールを送信する必要があるかどうかを確認します。他の回答よりも数行多いですが、岩のようにしっかりしています。

//is this the first day of the month?
$date = date('Y-m-d');
$pieces = explode("-", $date);
$day = $pieces[2];

//if it's not the first day then stop
if($day != "01") {

     echo "error - it's not the first of the month today";
     exit;

}

2

日付メソッドを使用すると、結果を取得できるはずです。すなわち; date( 'N / D / l'、mktime(0、0、0、month、day、year));

例えば

echo date('N', mktime(0, 0, 0, 7, 1, 2017));   // will return 6
echo date('D', mktime(0, 0, 0, 7, 1, 2017));   // will return Sat
echo date('l', mktime(0, 0, 0, 7, 1, 2017));   // will return Saturday

0

それらのすべての特別なphp表現は、精神的にfirst day of ...素晴らしいですが、私の頭の中で何度も何度も出てきます。

したがって、いくつかの基本的な日時の抽象化と、IDEによって自動補完される特定の実装のトンを構築することにしました。ポイントは、どのようなものかを見つけることです。同様に、todaynowthe first day of a previous month、私が列挙されてきたそれらのもののなどすべてがある日付時刻。したがって、というインターフェースまたは抽象クラスとISO8601DateTime、それを実装する特定の日時があります。

特定のケースのコードは次のようになります。

(new TheFirstDayOfThisMonth(new Now()))->value();

このアプローチの詳細については、このエントリをご覧ください。

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