php函数strtotime获取周一,上周一,上个月,下个月方法。strtotime函数正确使用php时间戳获取

2018-08-14
0评论
/
2179阅读
爱搜啊

phpstrtotime函数获取时间

strtotime(time,now);

pHP时间戳函数获取指定日期的unix时间戳 strtotime()('2012-12-7')

<?php echo strtotime('2012-12-7'); //结果:1354838400 ?>

将当前年月日转化为时间戳:PHP时间戳函数获取当前日期的unix时间戳,

<?php echo $time=intval(time()); ?>

得到时间戳后,那么怎么把时间戳转换为年月日呢?

示例代码

<?php
    echo date("Y-m-d H:i:s",intval(time()));
?>

php函数strtotime获取周一,上周一,上个月,下个月方法。strtotime函数正确使用

PHP时间戳函数获取英文文本日期时间

便于比较,使用date将当时间戳与指定时间戳转换成系统时间

(1)打印明天此时的时间戳strtotime(”+1 day”)
当前时间:echo date(”Y-m-d H:i:s”,time()) 结果:2009-01-22 09:40:25
指定时间:echo date(”Y-m-d H:i:s”,strtotime(”+1 day”)) 结果:2009-01-23 09:40:25
(2)打印昨天此时的时间戳strtotime(”-1 day”)
当前时间:echo date(”Y-m-d H:i:s”,time()) 结果:2009-01-22 09:40:25
指定时间:echo date(”Y-m-d H:i:s”,strtotime(”-1 day”)) 结果:2009-01-21 09:40:25
(3)打印下个星期此时的时间戳strtotime(”+1 week”)
当前时间:echo date(”Y-m-d H:i:s”,time()) 结果:2009-01-22 09:40:25
指定时间:echo date(”Y-m-d H:i:s”,strtotime(”+1 week”)) 结果:2009-01-29 09:40:25
(4)打印上个星期此时的时间戳strtotime(”-1 week”)
当前时间:echo date(”Y-m-d H:i:s”,time()) 结果:2009-01-22 09:40:25
指定时间:echo date(”Y-m-d H:i:s”,strtotime(”-1 week”)) 结果:2009-01-15 09:40:25
(5)打印指定下星期几的时间戳strtotime(”next Thursday”)
当前时间:echo date(”Y-m-d H:i:s”,time()) 结果:2009-01-22 09:40:25
指定时间:echo date(”Y-m-d H:i:s”,strtotime(”next Thursday”)) 结果:2009-01-29 00:00:00
(6)打印指定上星期几的时间戳strtotime(”last Thursday”)
当前时间:echo date(”Y-m-d H:i:s”,time()) 结果:2009-01-22 09:40:25
指定时间:echo date(”Y-m-d H:i:s”,strtotime(”last Thursday”)) 结果:2009-01-15 00:00:00
以上PHP时间戳函数示例可知源码天空,strtotime能将任何英文文本的日期时间描述解析为Unix时间戳,我们结合mktime()或date()格式化日期时间获取指定的时间戳,实现所需要的日期时间。

如果你理所当然地认为在 PHP 中获取周一,上周一,上个月,下个月这些时间能简单地用 strtotime() 函数来获取的话,那你就大错特错了!

参数         描述

time         必需。规定日期/时间字符串。

now         可选。规定用来计算返回值的时间戳。如果省略该参数,则使用当前时间。

$now = strtotime('2018-01-31');
echo date('Y-m-d', strtotime('+1 month', $now)) . "\n";

输出的结果是:

2018-03-03

并不是期望的返回2月份的某一天,而返回了错误的3月份。为什么呢?这和 strtotime() 的实现原理有关:

将月份加1,就变成了 2018-02-31

因为2月没有31号,所以修正,从 2018-02-28 再往前加3天

类似的,星期相关的代码也有问题。

$now = strtotime('2018-05-20'); // 这一天是周日
echo date('Y-m-d', strtotime('this monday', $now)) . "\n";
echo date('Y-m-d', strtotime('+0 monday', $now)) . "\n";

输出的结果是:

2018-05-21

2018-05-21

+0 monday 和 +1 monday 的结果是一样的,并不能将这种格式理解为本周一和下周一(见评论),特别容易出错的是,你可能会错误地认为 +1 monday 是下周一,但事实不是。要得到下周N,或者下下周N,需要先求出本周一。本周一的求法如下:

$now = strtotime('2018-05-20');
$time = $now - 86400 * (date('N', $now) - 1);
echo date('Y-m-d', $time) . "\n"; // 2018-05-14

然后再用本周一加减N个7天,得出前后的周一,之后再根据周一求周N。还有,"+n monday" 和 "-n monday" 的结果和期望不同,其处理逻辑不一致。结合评论,+n xxx 是从当天(含)开始找,-n xxx 是从前一天开始找, +-0 按 +1 处理。

一句话总结:PHP strtotime() 求上周,下周,上个月,下个月等,不能简单处理,需要特殊处理,都需要先求出本周一或者本周一号,再手动处理,而且星期的处理应该在求出本周一之后用时间戳整数运算

摘自:http://www.ideawu.net/blog/archives/1025.html


本站附件分享,如果附件失效,可以去找找看

诚通网盘附件百度网盘附件


于2018-08-14发布
相关文章