2016-12-31 8 views
1

月/年に関係なく日付範囲内でのみ実行するアクティビティがあります。現在の日付が30以上で、< = 05(翌月)であることを確認する必要があります。以下月曜日の日を確認するには

サンプルコード:

$t = microtime(true); 
$micro = sprintf("%06d",($t - floor($t)) * 1000000); 
$d = new DateTime(date('Y-m-d H:i:s.'.$micro, $t)); 
$date = substr($d->format("d"),0,2); 

if($date >= 30000000 && $date <= 05000000){ 
    $validate = true; 
} 

無効な範囲であるように私は単に> = 30、= 05 <を使用することはできません。または、コードする必要があります:

if($date = 30 || $date = 31 || $date = 01 || $date = 02 || $date = 03 || $date = 04 || $date = 05){ 
    $validate = true; 
} 
+0

あなたは ' 'j''書式指定子を使用して代わりにする必要があります'' d ':' $ day = $ d-> format( 'j'); '。文字列操作の必要はありません。 –

+0

現在の日付/時刻の 'DateTime'オブジェクトを構築するのに' microtime'は必要ありません。 '$ d = new DateTime();' –

答えて

1

ええ、私はあなたのコードは大丈夫だと思います。私は関係なく、月の日付の範囲内で行う活性を有する

$dates = array(30, 31, 1, 2, 3, 4, 5); 
if (in_array(((int)$date), $dates) 
    $validate = true; 
1

現在

:あなたは、私が推測するタイムスタンプを使用することによって行うことができますが、あなたのコードのために少し改善は可能性があり/年。現在の日付が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') 
); 
+0

現在の日付が6の場合はtrueを返すでしょうか? –

+0

@ 4LeaveCoverなぜ、いいえ、 '6 <30'と' 6> 5'なので、_false_を返します。異なる引数でテストすることができます。'新しいDateTime(" now + 6 days ")' –

+0

私が望む範囲は(現在の月)30,31,1,2,3,4,5(今月)ではないので、私はupvoteをしません。 1,2,3,4,5,30,31(当月)。しかし、あなたの努力に感謝します。 –

関連する問題