PHP: Самый простой способ получить дату месяца 6 месяцев до первого?

StackOverflow https://stackoverflow.com/questions/2625469

  •  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');
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top