PHP: самый простой способ получить дату месяца за 6 месяцев до первого? - PullRequest
29 голосов
/ 13 апреля 2010

Так что если сегодня было 12 апреля 2010 должен вернуться 1 октября 2009 года

Некоторые возможные решения, которые я нашел, кажутся слишком сложными, какие-либо предложения?

Ответы [ 4 ]

66 голосов
/ 13 апреля 2010

Хм, может как то так;

echo date("F 1, Y", strtotime("-6 months"));

EDIT;

если вы хотите указать пользовательскую дату использования;

echo date("F, 1 Y", strtotime("-6 months", strtotime("Feb 2, 2010")));
9 голосов
/ 13 апреля 2010

Немного хакерский, но работает:

<?php

$date = new DateTime("-6 months");
$date->modify("-" . ($date->format('j')-1) . " days");
echo $date->format('j, F Y');

?>
9 голосов
/ 13 апреля 2010

используйте комбинацию 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);
1 голос
/ 06 октября 2018

Это обсуждалось в комментариях, но в принятом ответе есть несколько ненужных 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');
...