我有以下声明。我可以从查询字符串获取日期,也可以获取今天的日期。
然后我需要获得当前,上个月,下个月。
我认为使用“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
答案 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'));