Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2549344
  • 博文数量: 271
  • 博客积分: 6659
  • 博客等级: 准将
  • 技术积分: 3141
  • 用 户 组: 普通用户
  • 注册时间: 2009-11-17 10:24
文章分类

全部博文(271)

文章存档

2016年(2)

2015年(12)

2014年(7)

2013年(19)

2012年(22)

2011年(81)

2010年(128)

分类: PHP

2013-04-28 18:29:42

在网上看了下如何获取给定日期的上个月第一天下个月第一天之类的PHP自定义函数。大多类似下面这种
  function GetPurMonth($date){//获取指定日期上个月的第一天和最后一天
      $time=strtotime($date);
      $firstday=date('Y-m-01',strtotime(date('Y',$time).'-'.(date('m',$time)-1).'-01'));
      $lastday=date('Y-m-d',strtotime("$firstday +1 month -1 day"));
      return array($firstday,$lastday);
  }


问题出现了。比如获取第一天,上面这种使用(date('m',$time)-1);万一要是获取给定日期的上上个月呢。难道要直接减2?那万一要是给定的日期是1月份呢。难道最终会成为 date('Y-m-01', strtotime('2012--1-01')) ?????这明显是个错误 的时间格式。
所以这种函数不适合扩展使用。于是查询了下PHP函数库。找到了这个函数  mktime();


mktime()
定义和用法
mktime() 函数返回一个日期的 Unix 时间戳。
参数总是表示 GMT 日期,因此 is_dst 对结果没有影响。
参数可以从右到左依次空着,空着的参数会被设为相应的当前 GMT 值。
语法
mktime(hour,minute,second,month,day,year,is_dst)


可能这个大家还看不出来他的神奇。下面他给了一个例子:
mktime() 函数对于日期运算和验证非常有用。它可以自动校正越界的输入;
这是什么意思。自动校正越界输入。对头。我们就是要这个功能。下面看下实例
echo date('Y-m-d', strtotime('2012--2-1'));
echo '
';
echo date('Y-m-d', mktime(0,0,0,-2,1,2012));
我们想输出2012年1月1号前2个月的日期。即 2011年10月1号。看下这个的结果
1970-01-01
2011-10-01
果然:第一个函数出错了。显示了时间戳为0的时间。而第二个函数让我们得到了想要的时间。

阅读(2046) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~