Laravel Carbon получить начало + конец текущей недели

Я работаю с Laravel 4 над инструментом для публикации/планирования меню ресторана на Facebook. Для этого мне нужен селектор даты на текущую неделю, начиная всегда с понедельника и заканчивая всегда в воскресенье.

Каркас меню ресторана

Я поиграл с примерами http://carbon.nesbot.com/docs/#api-getters, но безуспешно.

Есть идеи?


person Steve Brown    schedule 19.04.2016    source источник


Ответы (4)


Это довольно просто с Carbon Library. Вот пример кода:

$now = Carbon::now();
$weekStartDate = $now->startOfWeek()->format('Y-m-d H:i');
$weekEndDate = $now->endOfWeek()->format('Y-m-d H:i');

Даже у вас есть возможность изменить день начала и окончания недели. Это так,

$start = $now->startOfWeek(Carbon::TUESDAY);
$end = $now->endOfWeek(Carbon::MONDAY);

Источник: https://carbon.nesbot.com/docs/#api-getters

person Its_aggarwal    schedule 26.08.2018
comment
это установит обе переменные на конец недели, так как ->startOfWeek изменит переменную, а не сделает ее клоном - person user151496; 20.07.2021

Лучше всего использовать плагин jquery.

http://api.jqueryui.com/datepicker/

В вашем view.blade.php сделайте поле ввода

<input type="text" id="in">

В файле сценария выберите этот ввод и установите диапазон дат.

<script>
        $("#in").datepicker({
            minDate: new Date("{{Carbon\Carbon::now()->startOfWeek()->format('Y/m/d')}}"),
            maxDate: new Date("{{Carbon\Carbon::now()->endOfWeek()->format('Y/m/d')}}")
        });
</script>

Это должно выглядеть так

https://imgur.com/K0ZhiVy

person Marko Milivojevic    schedule 20.04.2016

Это дает вам начало недели (понедельник) до конца недели (воскресенье).

Не знаю, является ли это настройкой на сервере. (Некоторые люди помещают начальную неделю в воскресенье)

private $start;
private $end;

public function setWeekPeriod($weeknumber)
{
    $week_start = (new DateTime())->setISODate(date("Y"),$weeknumber)->format("Y-m-d H:i:s");

    $this->start = Carbon::createFromFormat("Y-m-d H:i:s", $week_start);
    $this->start->hour(0)->minute(0)->second(0);
    $this->end = $this->start->copy()->endOfWeek();
}
person Demian    schedule 19.04.2016

Обратите внимание, что вам нужно будет использовать CarbonImmutable, если вы хотите, чтобы дата начала оставалась началом недели. (Также это не Laravel Carbon, это просто Carbon)

$now = CarbonImmutable::now();
$weekStartDate = $now->startOfWeek();
$weekEndDate = $now->endOfWeek();
person Trent Ramseyer    schedule 15.10.2020
comment
Спасибо. Я был совершенно озадачен тем, почему моя начальная дата была изменена путем вызова endOfWeek() в исходном экземпляре даты. Теперь я понимаю. - person Redtama; 22.04.2021