第七星尘

php如何实现日期递增递减

何为日期相加减?例如,今天是2013-02-06,星期三。因为开发需要,需要得到两个月后的日期,
即“2013-04-06”。日期“2013-02-06”在PHP中只是一个字符串而已。你总不能
这样以“2013-02-06”+“0000-02-00”来表达递增两个月吧?
所以,这时候就要到一个相当有用的PHP日期操作函数:strtotime()
像上面的问题,正确的解应该是:

echo date("Y-m-d",strtotime("+2 month"));
//输出两个月后的日期,2013-04-06


如果你要求某一个具体日期(例如说2012-12-12)两个月后的日期,则可以这样写:

echo date("Y-m-d",strtotime("+2 month", strtotime("2012-12-12")));
//输出两个月后的日期,2013-02-12

从以上例子可以总结出,PHP操作日期的时候,要先把日期字符串(比如”2013-04-06″)先转为为时间戳。strtotime()函数在转化的同时完成日期递增减。接着为了可视化方便,再用date()函数还远还原为字符串日期。
下面再给出一些例子。

echo date("Y-m-d",strtotime("+1 day")) //明天的日期
echo "<br>";//换行
echo date("Y-m-d",strtotime("+1 week")) //一周后的今天
echo "<br>";//换行
echo date("Y-m-d",strtotime("+1 month")) //下个月的今天
echo "<br>";
echo date("Y-m-d",strtotime("+1 year")) //明年今日
echo "<br>";

最后,附上一个复杂点的应用例子:

/*
* 用来返回指定日期的周一和周日
* 参数$year 为年份,$week 为这一年的第几周
*/
function get_week_range($week, $year)
{
$timestamp = mktime(1,0,0,1,1,$year);
$firstday = date("N",$timestamp);
if($firstday >4)
$firstweek = strtotime(‘+’.(8-$firstday).’ days’, $timestamp);
else
$firstweek = strtotime(‘-‘.($firstday-1).’ days’, $timestamp);

$monday = strtotime(‘+’.($week – 1).’ week’, $firstweek);
$sunday = strtotime(‘+6 days’, $monday);

$start = date("Y-m-d", $monday);
$end = date("Y-m-d", $sunday);

return array($start, $end);
}
分享到: 更多
码字很辛苦,转载请注明来自第七星尘的技术博客《php如何实现日期递增递减》

评论

  1. 哆略咪小调 #1

    wordpress想弄个页面调用上个月的文章列表出来,怎么弄啊。

    回复
    2013-02-25
    • 第七星尘

      一般主题有文章归档页面的吧。我好久没弄过wp了

      回复
      2013-02-25