回答:
動作するには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
->modify()
最初の日だけが必要な場合は、通過する必要がないことに注意してください。次のように、DateTimeコンストラクタに直接渡すことができます。ただ言う...'first day of this month'
$date = new DateTime('first day of this month')
これが私が使うものです。
月の初日:
date('Y-m-01');
月の最終日:
date('Y-m-t');
date('Y-m-t');
。
date('w', '2015-05-01');
と、実際の日付ではなく前日になります。(これにより、正しい5ではなく4が得られます)。
$monthStart = date('Y-m-01 00:00:00'); $monthEnd = date('Y-m-t 23:59:59');
これはあなたが必要とするすべてです:
$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/>';
strtotime('first day of this month', time())
、最初の日が返され、時間は現在と同じです。それで、それは、その最初の日は0:00でなく、その最初の日であり、現在の時刻であるからです。これはそれを修正しstrtotime('first day of this month 00:00:00', time())
ます。
現在、私はこのソリューションを使用しています:
$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');
私はこれを行うためにクレイジーな方法を使用しています
$firstDay=date('Y-m-d',strtotime("first day of this month"));
$lastDay=date('Y-m-d',strtotime("last day of this month"));
それで全部です
醜い(そして上記のメソッド呼び出しを使用しない)が機能します。
echo 'First day of the month: ' . date('m/d/y h:i a',(strtotime('this month',strtotime(date('m/01/y')))));
last day of {$month} {$year}
またはlast day of this month
両方が機能します。ただし、$ monthは、「January」のように「Decemember」と考えられる限り、月の名前を含む文字列でなければならないことに注意してください。または、単にを使用することもできますdate('Y-m-t');
。
これを毎日の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;
}
日付メソッドを使用すると、結果を取得できるはずです。すなわち; 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
それらのすべての特別なphp表現は、精神的にfirst day of ...
素晴らしいですが、私の頭の中で何度も何度も出てきます。
したがって、いくつかの基本的な日時の抽象化と、IDEによって自動補完される特定の実装のトンを構築することにしました。ポイントは、どのようなものかを見つけることです。同様に、today
、now
、the first day of a previous month
、私が列挙されてきたそれらのもののなどすべてがある日付時刻。したがって、というインターフェースまたは抽象クラスとISO8601DateTime
、それを実装する特定の日時があります。
特定のケースのコードは次のようになります。
(new TheFirstDayOfThisMonth(new Now()))->value();
このアプローチの詳細については、このエントリをご覧ください。