-1

Carbon PHP ライブラリを使用しています。重複した質問の回答では、PHP の組み込み関数を使用しています。

ある日付範囲内の何日が別の日付範囲内にあるかを数える


以下は、日付範囲 ($userDateStartおよび$userDateEnd) が別の日付範囲 ( $couponStart and$couponEnd`) に含まれているかどうかを確認するために使用するコードであり、エラーなしで正常に動作しますが、重複/存在する日を見つける方法がわかりませんはこの期間内ですか?

私が使用しているライブラリはhttp://carbon.nesbot.com/docs/です

この場合、予想される結果は 4 になるはずです。

$userDateStart = Carbon::createFromFormat('Y-m-d','2015-06-26');
$userDateEnd  = Carbon::createFromFormat('Y-m-d','2015-06-29');

$couponStart  = Carbon::createFromFormat('Y-m-d','2015-06-26');
$couponEnd    = Carbon::createFromFormat('Y-m-d','2015-10-31');

if(($userDateStart >= $couponStart && $userDateEnd <= $couponEnd) ||
    ($couponStart >= $userDateStart && $couponEnd <= $userDateEnd)){
    die("Yes,The date is within this date range");
}
die("No,It is not within this date range");
4

1 に答える 1

0

提供されたドキュメントによると、これを使用する必要があります。

$dt = Carbon::create(2012, 4, 30, 0);
echo $dt->diffInDays($dt->copy()->addMonth()); // 30
echo $dt->diffInDays($dt->copy()->addWeek()); // 7

したがって、プログラムを操作するには、次のことを行う必要があると思います。

$userDateStart = Carbon::createFromFormat('Y-m-d','2015-06-26');
$userDateEnd  = Carbon::createFromFormat('Y-m-d','2015-06-29');

$couponStart  = Carbon::createFromFormat('Y-m-d','2015-06-26');
$couponEnd    = Carbon::createFromFormat('Y-m-d','2015-10-31');

//Determin the highest date from the starts and the minimum dates from the ends
$startBetweenDate = $userDateStart->max($couponStart);
$endBetweenDate = $userDateEnd->min($couponEnd);

//Now find how many days are between
echo $startBetweenDate->diffInDays($endBetweenDate); //Should be 4

注: Carbon のライブラリがインストールされていないため、これはテストされていません。

于 2015-06-26T13:38:56.500 に答える