Laravel -> Углеродная дата -> Установить номер недели месяца на основе дня - PullRequest
0 голосов
/ 04 марта 2020

Я пытаюсь решить проблему, в которой мне нужно сопоставить «номер недели» на основе дня собрания (ie пятница) с помощью плагина Carbon Date для Laravel

с текущим месяц (март 2020), 1-е выпадает на воскресенье. Однако я не хочу, чтобы Carbon рассматривал это как 1-ю неделю, а следующую неделю - как 2-ю. Я хотел бы, чтобы приложение посмотрело, сколько пятниц в месяце, и посчитало, сколько недель в месяце.

Я использую это в своем контроллере

    $date = Carbon::parse($request->get('rolldate'))->format('Y-m-d');
    $e = new Rollmapping();
    $e->roll_date = Carbon::parse($request->get('rolldate'));
    $e->roll_year = Carbon::parse($date)->year;
    $e->roll_month = Carbon::parse($date)->month;
    $e->roll_week = Carbon::parse($date)->weekNumberInMonth;
    $e->save();    

Однако, если я создаю Roll 6 марта, я получу 2 для roll_week, где бы я хотел 1, так как это первая пятница и продолжение оттуда ie на следующей (13-й) неделе будет неделя 2, а не неделя 3

1 Ответ

0 голосов
/ 04 марта 2020

Возможно, вам нужно использовать свойство weekOfMonth вместо weekNumberInMonth

weekNumberInMonth

weekNumberInMonth. Рассмотрим недели с понедельника по воскресенье, поэтому неделя 1 будет содержать 1 день, если месяц начинается с воскресенья и до 7, если он начинается с понедельника.

weekOfMonth

weekOfMonth вернет 1 для 7 первых дней месяца, затем 2 с 8-го по 14-е, 3 с 15-го по 21-е, 4 с 22-го по 28-е и 5 выше

echo \Carbon\Carbon::parse('first friday')->weekOfMonth;
> 1

echo \Carbon\Carbon::parse('first friday')->weekNumberInMonth;
> 2

Также следует учитывать, что первый день месяца между воскресеньем к пятнице следующие сравнения:

var_dump(\Carbon\Carbon::parse('first day')->gt('first sunday') && \Carbon\Carbon::parse('first day')->lt('first friday'));
> false

Если это так, вы должны добавить 1 к weekOfMonth свойство

Надеюсь, это поможет вам

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...