php开发过程中,经常会用到一些针对日期、时间、时间戳的转换获取等操作,如下个月第一天啊,上周啊,每个月第三天啊;形式多样,层出不穷。然而,具体到应用时,总想不起具体使用方式,查询网上总没有一个非常全面的整理。不论是博客上还是官网上,都不全面,有的只是文字说明,有的只是简单实例,都不具有实战性。
基于此,整理本文;本文几乎全部是实例;看着非常方便。
//时间戳加减时间段,day,week,month,year是否带s都可以,与前面的数字是否有空格也都可以。 //因此,这个strtotime对格式要求不严格 $tt=strtotime("+3 days",$time);//$time 3天之后的时间戳 $tt=strtotime("+6 month",$time);//$time6个月之后的时间戳 $tt=strtotime("+1 year 6 months",$time);//指定时间戳1年6个月后的时间戳 $t=time();//当前时间:1545184219,2018-12-19上午9点50 echo strtotime(date('Y-m-01', $t));//结果是:1543593600(2018/12/1 0:0:0) echo strtotime(date('Y-m-10', $t));//结果是:1544371200(2018/12/10 0:0:0) echo strtotime(date('Y-m-d 8:0:0', $t));//结果是:1545177600(2018/12/19 8:0:0) echo strtotime(date("Y-m-d",time()).' 23:59:59');//当天23:59:59的INT类型时间戳 echo strtotime(date("Y-m-t", $tt1).' 23:59:59');//根据某一时间戳获取当月最后的时间戳 $t0 = strtotime(date('Y-m-01', strtotime('-1 month', $t)));//上月起点 $t1 = strtotime(date('Y-m-01'));//本月起点 $t2 = strtotime(date('Y-m-t 23:59:59'));//本月终点 //关于生日判断 $shengri='1986-01-06'; $date=date("m-d",strtotime($shengri));//结果是:01-06 $t_date=strtotime(date('Y-'.$date.'8:0:0', time()));//结果是:1546732800(2019/1/6 8:0:0)
关于strtotime()出现的一些奇怪的问题
date("Y-m-d",strtotime("-1 month"))//如果当前是2018-07-31,则输出2018-07-01 var_dump(date("Y-m-d", strtotime("2017-06-31")));//输出2017-07-01
虽然这个问题看起来很迷惑, 但从内部逻辑上来说呢, 其实是"没问题"的,因为这样:
我们来模拟下date内部的对于这种事情的处理逻辑:
1. 先做-1 month, 那么当前是07-31, 减去一以后就是06-31.
2. 再做日期规范化, 因为6月没有31号, 所以就好像2点60等于3点一样, 6月31就等于了7月1
也就是说, 只要涉及到大小月的最后一天, 都可能会有这个迷惑, 我们也可以很轻松的验证类似的其他月份, 印证这个结论:
var_dump(date("Y-m-d", strtotime("-1 month", strtotime("2017-03-31")))); //输出2017-03-03 var_dump(date("Y-m-d", strtotime("+1 month", strtotime("2017-08-31")))); //输出2017-10-01 var_dump(date("Y-m-d", strtotime("next month", strtotime("2017-01-31")))); //输出2017-03-03 var_dump(date("Y-m-d", strtotime("last month", strtotime("2017-03-31")))); //输出2017-03-03
那怎么办呢?
从PHP5.3开始呢, date新增了一系列修正短语, 来明确这个问题, 那就是"first day of" 和 "last day of", 也就是你可以限定好不要让date自动"规范化":
var_dump(date("Y-m-d", strtotime("last day of -1 month", strtotime("2017-03-31")))); //输出2017-02-28 var_dump(date("Y-m-d", strtotime("first day of +1 month", strtotime("2017-08-31")))); //输出2017-09-01 var_dump(date("Y-m-d", strtotime("first day of next month", strtotime("2017-01-31")))); //输出2017-02-01 var_dump(date("Y-m-d", strtotime("last day of last month", strtotime("2017-03-31")))); //输出2017-02-28
1.本站大部分内容均收集于网络!若内容若侵犯到您的权益,请发送邮件至:duhaomu@163.com,我们将第一时间处理!
2.资源所需价格并非资源售卖价格,是收集、整理、编辑详情以及本站运营的适当补贴,并且本站不提供任何免费技术支持。
3.所有资源仅限于参考和学习,版权归原作者所有,更多请阅读网站声明。