Carbon 在两周范围日期后的一周内获得兴趣
Carbon get interested week in two weeks range date
我正在尝试编写一种算法,根据日期范围计算感兴趣的周(星期六到星期六)。
例如我有这个范围:
2018-01-04 to 2018-01-13
在这种情况下,我有两周的利息,它是:"week 1" 从 1 月 1 日到 07 日和 "week 2" 从同一个 1 月 08 日到 14 日。
在这种情况下,算法会回复我感兴趣的周是 "Week 2",因为该周的天数高于 "week 1" 中的天数。
我如何在 Carbon 中执行此操作?
- 假设您将开始日期和结束日期作为 Carbon 对象
$s
和 $e
- 确保差异小于 14 天
- 计算重叠:
$s->diffInDays($s->copy()->startOfWeek())
"offset" 进入第一周
$e->copy()->endOfWeek()->diffInDays($e)
"remainder" 上周
- if
$offset > $remainder
select $e
;否则 select $s
- 输出
$selectedWeek->copy()->startOfWeek()
和$selectedWeek->copy()->endOfWeek()
显然,startOfWeek()
和 endOfWeek()
改变了对象;所以在使用这些方法之前一定要copy()
!
实施:
$s = new Carbon\Carbon('2018-01-04');
$e = new Carbon\Carbon('2018-01-13');
$diff = $e->diffInDays($s);
if ($diff > 14) die("uh-oh!");
$offset = $s->diffInDays($s->copy()->startOfWeek());
$remainder = $e->copy()->endOfWeek()->diffInDays($e);
$selectedWeek = ($offset > $remainder ? $e : $s)->copy()->startOfWeek();
echo "selected week {$selectedWeek->weekOfYear} ({$selectedWeek} - {$selectedWeek->copy()->endOfWeek()})";
输出:
selected week 2 (2018-01-08 00:00:00 - 2018-01-14 23:59:59)
我想你可以做这样的事情。我还没有测试过,但你可以得到一些想法。另外我想指出文档 https://carbon.nesbot.com/docs/
// Create dates
$date1 = Carbon::create(2018, 1, 4, 0, 0, 0);
$date2 = Carbon::create(2018, 1, 13, 0, 0, 0);
// Get The week numbers
$week_date_1 = $date1->weekOfYear;
$week_date_2 = $date2->weekOfYear;
// Count number of days for each week
$number_of_days_week_1 = $date1->diffInDays($date1->startOfWeek);
$number_of_days_week_2 = $date2->diffInDays($date2->startOfWeek);
// Highest number of days per week wins
if($number_of_days_week_1 > $number_of_days_week_2){
return $week_date_1;
} else {
return $week_date_2;
}
我正在尝试编写一种算法,根据日期范围计算感兴趣的周(星期六到星期六)。 例如我有这个范围:
2018-01-04 to 2018-01-13
在这种情况下,我有两周的利息,它是:"week 1" 从 1 月 1 日到 07 日和 "week 2" 从同一个 1 月 08 日到 14 日。
在这种情况下,算法会回复我感兴趣的周是 "Week 2",因为该周的天数高于 "week 1" 中的天数。
我如何在 Carbon 中执行此操作?
- 假设您将开始日期和结束日期作为 Carbon 对象
$s
和$e
- 确保差异小于 14 天
- 计算重叠:
$s->diffInDays($s->copy()->startOfWeek())
"offset" 进入第一周$e->copy()->endOfWeek()->diffInDays($e)
"remainder" 上周
- if
$offset > $remainder
select$e
;否则 select$s
- 输出
$selectedWeek->copy()->startOfWeek()
和$selectedWeek->copy()->endOfWeek()
显然,startOfWeek()
和 endOfWeek()
改变了对象;所以在使用这些方法之前一定要copy()
!
实施:
$s = new Carbon\Carbon('2018-01-04');
$e = new Carbon\Carbon('2018-01-13');
$diff = $e->diffInDays($s);
if ($diff > 14) die("uh-oh!");
$offset = $s->diffInDays($s->copy()->startOfWeek());
$remainder = $e->copy()->endOfWeek()->diffInDays($e);
$selectedWeek = ($offset > $remainder ? $e : $s)->copy()->startOfWeek();
echo "selected week {$selectedWeek->weekOfYear} ({$selectedWeek} - {$selectedWeek->copy()->endOfWeek()})";
输出:
selected week 2 (2018-01-08 00:00:00 - 2018-01-14 23:59:59)
我想你可以做这样的事情。我还没有测试过,但你可以得到一些想法。另外我想指出文档 https://carbon.nesbot.com/docs/
// Create dates
$date1 = Carbon::create(2018, 1, 4, 0, 0, 0);
$date2 = Carbon::create(2018, 1, 13, 0, 0, 0);
// Get The week numbers
$week_date_1 = $date1->weekOfYear;
$week_date_2 = $date2->weekOfYear;
// Count number of days for each week
$number_of_days_week_1 = $date1->diffInDays($date1->startOfWeek);
$number_of_days_week_2 = $date2->diffInDays($date2->startOfWeek);
// Highest number of days per week wins
if($number_of_days_week_1 > $number_of_days_week_2){
return $week_date_1;
} else {
return $week_date_2;
}