PHP: Самый простой способ получить дату месяца 6 месяцев до первого?
-
26-09-2019 - |
Вопрос
Так что, если сегодня было 12 апреля 2010 года, он должен вернуть 1 октября 2009 года
Некоторые возможные решения, которые я погугулировал, кажутся чрезмерно сложным, любым предложениями?
Решение
HM, может быть, что-то вроде этого;
echo date("F 1, Y", strtotime("-6 months"));
РЕДАКТИРОВАТЬ;
Если вы хотите указать пользовательское использование даты;
echo date("F, 1 Y", strtotime("-6 months", strtotime("Feb 2, 2010")));
Другие советы
Немного взлома, но работает:
<?php
$date = new DateTime("-6 months");
$date->modify("-" . ($date->format('j')-1) . " days");
echo $date->format('j, F Y');
?>
использовать комбинацию mktime
и date
:
$date_half_a_year_ago = mktime(0, 0, 0, date('n')-6, 1, date('y'))
сделать новую дату относительно заданной даты, а не сегодня, позвоните date
со вторым параметром
$given_timestamp = getSomeDate();
$date_half_a_year_ago = mktime(0, 0, 0, date('n', $given_timestamp)-6, 1, date('y', $given_timestamp))
Для вывода его отформатированы, просто используйте date
очередной раз:
echo date('F j, Y', $date_half_a_year_ago);
Он обсуждался в комментариях, но принятый ответ имеет некоторые ненужные strtotime()
звонки. Можно упростить:
date("F 1, Y", strtotime("Feb 2, 2010 - 6 months"));
Кроме того, вы можете использовать DateTime()
Таким образом, что я думаю, в равной степени как читаемый:
(new DateTime('Feb 2, 2010'))->modify('-6 months')->format('M 1, Y');
Или используя статический метод ....
DateTime::createFromFormat('M j, Y','Feb 2, 2010')
->modify('-6 months')
->format('M 1, Y');