Как мне минус один месяц с года-месяц 2019-03 - PullRequest
0 голосов
/ 05 марта 2019

Я пытаюсь вычесть один месяц из текущего года приема-месяца ( 2019-03 )

echo $payroll['month'];
echo $newdate = date("Y-m", strtotime("-1 months",$payroll['month']));

, но из-за ошибки:

2019-03

Обнаружена ошибка PHP

Серьезность: Уведомление

Сообщение. Обнаружено неверно сформированное числовое значение

что я хочу, чтобы 2019-03 вычиталосьодин месяц, поэтому я получу 2019-02

Ответы [ 5 ]

0 голосов
/ 05 марта 2019

Осторожно ... простое добавление или вычитание одного месяца в строке yyyy-mm может привести к неожиданным результатам в некоторых крайних случаях.Бывает, что я использую этот формат на сайте, который я создал (для расчета заработной платы и других вещей), и когда расчет был сделан 28 февраля (IIRC) и других крайних случаях, результат не всегда был таким, каким я должен был быть (т.е., следующий или предыдущий месяц)

Это немного больше кода, но я бы посоветовал:

$first_of_month = date('Y-m-01', strtotime($payroll['month']));
$newdate = date('Y-m', strtotime($first_of_month."-1 month"));

Принудительно установить в качестве начального значения полную дату Ymd в первый день.месяца (день для вас не имеет значения, так как он используется только для расчета), вы можете быть уверены, что расчет будет правильным каждый раз

0 голосов
/ 05 марта 2019

Здесь так много хороших ответов.

Просто обратите внимание, что это можно сделать с помощью класса PHP DateTime .

$date = new DateTime("2019-03-03");
$date->sub(new DateInterval('P1M')); // P -> Period 1 Month
echo $date->format("Y-m")
// Outputs: 2019-02

Краткое примечание от strtotime() официальная документация.

Примечание. Использование этой функции для математических операций не рекомендуется.Лучше использовать DateTime :: add () и DateTime :: sub () в PHP 5.3 и более поздних версиях или DateTime :: modify () в PHP 5.2.

0 голосов
/ 05 марта 2019

Попробуйте это -

echo $newdate = date('Y-m', strtotime('-1 months', strtotime($payroll['month'])));
0 голосов
/ 05 марта 2019

Вы можете добавить еще один strtotime, чтобы получить желаемый результат

$payroll['month'] = "2019-03";
echo $payroll['month'];
echo $newdate = date("Y-m", strtotime("-1 months", strtotime($payroll['month'])));

Другой способ сделать то же самое:

date('Y-m', strtotime($payroll['month'] . '-1 months'))

Это также будет работать для вас.

0 голосов
/ 05 марта 2019

Вы можете попробовать следующее решение:

date('Y-m', strtotime($payroll['month'] . ' - 1 month'))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...