Установите день без переполнения (с помощью PHP Carbon)

Установите день без переполнения (с помощью PHP Carbon)

12.07.2018 03:35:55 Просмотров 56 Источник

Я использую Carbon (PHP library), чтобы установить день на дату. Но я хочу, чтобы это происходило не в следующем месяце, а скорее остановилось и в конце месяца. Пример:

Carbon::create(2018, 2, 27, 0, 0, 0)->day(31);

Я получаю

2018-03-03 00: 00: 00

Но мне нужно

2018-02-28 00: 00: 00

Когда вы работаете месяцами, углерод дает вам ->subMonthsNoOverflow()и - >addMonthsNoOverflow()что действительно полезно, но нет ничего подобного для установки дня.

У вопроса есть решение - Посмотреть?

Ответы - Установите день без переполнения (с помощью PHP Carbon) / Set day with no overflow (with PHP Carbon)

Kirk Beard

12.07.2018 03:42:45

Можете ли вы использовать endOfMonth()вместо этого?

Carbon::create(2018, 2, 27, 0, 0, 0)->endOfMonth();

Полный список модификаторов приведен в документации по углероду.

https://stackoverflow.com/questions/51295845/set-day-with-no-overflow-with-php-carbon/51295888#comment89569286_51295888
Нет, а что, если он мне понадобится на 30-й? Мне это нужно в один день, а не в конце месяца.
https://stackoverflow.com/questions/51295845/set-day-with-no-overflow-with-php-carbon/51295888#comment89569298_51295888
30 февраля не существует, поэтому endOfMonth()даст вам 28 февраля (или 29 февраля в високосный год). В другие месяцы, которые содержат 30 или 31 день, он вернет эту дату, т. е. 31 марта.
https://stackoverflow.com/questions/51295845/set-day-with-no-overflow-with-php-carbon/51295888#comment89569324_51295888
А 31-го января я получу вместо 30-го.
https://stackoverflow.com/questions/51295845/set-day-with-no-overflow-with-php-carbon/51295888#comment89569333_51295888
Да, Carbon::create(2018, 1, 27, 0, 0, 0)->endOfMonth();даст вам 31 января.
https://stackoverflow.com/questions/51295845/set-day-with-no-overflow-with-php-carbon/51295888#comment89569367_51295888
Мне нужно установить день на дату. Скажем, Мне нужен 30-й. Для января это будет '- > день (30); ' но для февраля это не удастся.
https://stackoverflow.com/questions/51295845/set-day-with-no-overflow-with-php-carbon/51295888#comment89570924_51295888
@Евгений Афанасьев Итак, вы хотели бы иметь возможность установить 30-е число каждого месяца, кроме февраля, который будет 28-м (или 29-м в високосные годы). Это правда?
https://stackoverflow.com/questions/51295845/set-day-with-no-overflow-with-php-carbon/51295888#comment89572939_51295888
Нет, я хочу установить день для экземпляра углерода. точно так же, как функция углерода ->day($d)работает, но если месяц не имеет этого дня, эта функция дает мне еще один месяц, я не хочу этого, я хочу последний день месяца.
cbaconnier

20.11.2019 10:26:35

Начиная с Carbon 2.0 они добавили метод addUnitNoOverflow($unit, $value, $overflowUnit), но он по-прежнему недокументирован.

Мне удалось получить 2019-02-28, сделав это так

Carbon::parse('2019-02-01')->addUnitNoOverflow('day', 31, 'month')->format('Y-m-d')
 Carbon\Carbon @1551398399 {#3013
     date: 2019-02-28 23:59:59.999999 UTC (+00:00),
   }

Вопрос на GitHub - Источник

Закрыть X