現在日
:あなたは、私が推測するタイムスタンプを使用することによって行うことができますが、あなたのコードのために少し改善は可能性があり/年。現在の日付が30以上で、< = 05(翌月)であることを確認する必要があります。
現在のの日付は、定義によって翌月になることはできません。ですから、現在の日付が1 STの間で、第5 または第30 以上であるかどうかを確認したい場合は、単に$day = $datetime->format('j')
で一日を取得することができますし、$day <= 5
または$day >= 30
かどうかを確認します。
のDateTime
オブジェクトを構築するには、現在はの日付を引数なしで単に呼び出します。例:
function validate($format = 'now') {
$now = new DateTime($format);
$day = $now->format('j');
return ($day >= 30 || $day <= 5);
}
テスト
// Create DateTime object for the first day of the current month
$d = new DateTime('first day of');
$day_to = (new DateTime())->format('j');
for ($i = 0; $i < $day_to; $i++) {
printf("%d: %d\n", $i + 1, validate('@' . $d->getTimestamp() . " + $i days"));
}
出力
1: 1
2: 1
3: 1
4: 1
5: 1
6: 0
7: 0
...
27: 0
28: 0
29: 0
30: 1
31: 1
あなたは日付が日付の範囲に該当するかどうかを確認したい場合は任意の日付、共同利用オブジェクトのDateTime
の比較演算子。あなたの特定のケースで
、あなたは範囲のための2つのDateTime
オブジェクトを構築し、次の例のように任意のDateTime
オブジェクトにそれらを比較することができます
$d = new DateTime('2017-02-01 20:15');
// 5th day of the next month
$rhd = new DateTime('first day of next month');
$rhd->modify('+4 day');
$rhd->setTime(0, 0, 0);
// 30th day of the current month
$lhd = new DateTime('first day of');
$lhd->modify('+29 day');
$lhd->setTime(0, 0, 0);
printf(
"%s %s between\n%s and\n%s\n",
$d->format('r'),
($d >= $lhd && $d <= $rhd) ? 'is' : 'is not',
$lhd->format('r'),
$rhd->format('r')
);
あなたは ' 'j''書式指定子を使用して代わりにする必要があります'' d ':' $ day = $ d-> format( 'j'); '。文字列操作の必要はありません。 –
現在の日付/時刻の 'DateTime'オブジェクトを構築するのに' microtime'は必要ありません。 '$ d = new DateTime();' –