在php中添加日期

时间:2011-08-15 20:26:57

标签: php

我有以下声明。我可以从查询字符串获取日期,也可以获取今天的日期。

然后我需要获得当前,上个月,下个月。

我认为使用“strtotime”

我会出错
$selecteddate = ($_GET ['s'] == "" )
    ? getdate()
    : strtotime ($_GET ['s']) ;


    $previousMonth = strtotime(date("Y-m-d", $selecteddate) . " +1 month");

    $previousMonthName = $previousMonth[month];
    print $previousMonthName;
    $month = $selecteddate[month];

/ * edit * /

$selecteddate = ($_GET ['s'] == "" )
? getdate()
: strtotime ($_GET ['s']) ;

$previousMonth = strtotime(" -1 month", $selecteddate);
$nextMonth = strtotime(" +1 month", $selecteddate);


$previousMonthName = date("F",$previousMonth); //Jan
$nextMonthName = date("F",$nextMonth); // Jan
$month = $selecteddate[month];  // Aug

3 个答案:

答案 0 :(得分:2)

你几乎是对的 - 只需替换

$previousMonth = strtotime(date("Y-m-d", $selecteddate) . " +1 month");

通过

$previousMonth = strtotime(" +1 month", $selecteddate);

查看documentation以了解有关第二个参数(称为“$ now”)的更多信息。要获取月份名称,请执行此操作(documentation again):

$previousMonthName = date("F",$previousMont);
$month = date("F",$selecteddate); // not sure if you want to get the monthname here,
                                  // but you can use date() to get a lot of other
                                  // values, too

答案 1 :(得分:1)

oezi's answer将在几个月结束时遇到问题。这是由于PHP对±1 month的解释,它只是递增/递减月份,然后根据需要调整日期部分。

例如,给定31 October+1 month,日期将变为31 November,但不存在。 PHP将此考虑在内,并将约会日期定位到1 December-1 month成为1 October也是如此。

存在各种替代方法,其中一种方法是根据需要使用(少用的)DateTime::setDate()明确设置修改日期。

// e.g. $selecteddate = time();

$now = new DateTime;
$now->setTimestamp($selecteddate);

// Clone now to hold previous/next months
$prev = clone $now;
$next = clone $now;

// Alter objects to point to previous/next month
$prev->setDate($now->format('Y'), $now->format('m') - 1, $now->format('d'));
$next->setDate($now->format('Y'), $now->format('m') + 1, $now->format('d'));

// Go wild
var_dump($prev->format('r'), $next->format('r'));

答案 2 :(得分:1)

我认为salathe的回答可能实际上与他在oezi的答案中指出的同样问题有关。他将$ now->格式('d')传递给setDate()作为日期编号,但是在31天内的一个月中,如果目标月份只有30天,则可能没有意义。如果你试图设置一个不理智的​​日期,我不确定SetDate会做什么 - 最有可能引发错误。但解决方案非常简单。所有月份都有一天的数字1.这是我的salathe代码版本。

// e.g. $selecteddate = time();

$now = new DateTime;
$now->setTimestamp($selecteddate);

// Clone now to hold previous/next months
$prev = clone $now;
$next = clone $now;

// Alter objects to point to previous/next month. 
// Use day number 1 because all the questioner wanted was the month.
$prev->setDate($now->format('Y'), $now->format('m') - 1, 1);
$next->setDate($now->format('Y'), $now->format('m') + 1, 1);

// Go wild
var_dump($prev->format('r'), $next->format('r'));