При выполнении инструкции DML вы должны использовать executeUpdate
/ execute
, а не executeQuery
.
Вот краткое сравнение:
Вы можете попробовать следующее решение:
date('Y-m', strtotime($payroll['month'] . ' - 1 month'))
Здесь так много хороших ответов.
Просто отметьте, что это можно сделать с помощью класса 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.
BLOCKQUOTE>
Вы можете добавить еще один 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'))
Это также будет работать для вас. [ 115]
Осторожно ... простое добавление или вычитание одного месяца в строке 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 в первый день месяца (день для вас не имеет значения, так как он используется только для расчета), вы можете быть уверены, что расчет будет правильным каждый раз