`

PHP 关于strtotime("- x month") bug的解决

阅读更多

strtotime('-x month'); 在涉及到月份修改的时候,可能不会得到预料的结果。

此为php的一个bug:

https://bugs.php.net/bug.php?id=27793

 

如:当前时间为: 2011-08-31 17:21:22

<?php
date_default_timezone_set('Asia/Shanghai');
$t = time();
print_r(array(
            date('Y年m月',$t),
            date('Y年m月',strtotime('- 1 month',$t)),
            date('Y年m月',strtotime('- 2 month',$t)),
));

?>

上面代码输出:

Array
(
    [0] => 2011年08月
    [1] => 2011年07月
    [2] => 2011年07月
)

而预期的结果是:

Array
(
    [0] => 2011年08月
    [1] => 2011年07月
    [2] => 2011年06月
)

 

============================================

 

可以用如下方法解决:

<?php

date_default_timezone_set('Asia/Shanghai');

$first_day_of_month = date('Y-m',time()) . '-01 00:00:01';
$t = strtotime($first_day_of_month);
print_r(array(
            date('Y年m月',$t),
            date('Y年m月',strtotime('- 1 month',$t)),
            date('Y年m月',strtotime('- 2 month',$t)),
));

?>

输出:

Array
(
    [0] => 2011年08月
    [1] => 2011年07月
    [2] => 2011年06月
)

分享到:
评论

相关推荐

    PHP中strtotime函数使用方法.docx

    在PHP编程语言中,strtotime()函数是一个非常实用的工具,它能够将人类可读的英文日期或时间描述转换为Unix时间戳。Unix时间戳是从1970年1月1日(UTC/GMT的午夜)开始所经过的秒数,不考虑闰秒。这个函数在处理日期...

    PHP时间戳 strtotime()使用方法和技巧

    在php中我想要获取时间戳有多种方法,最常用的就是使用time函数与strtotime()函数把日期转换成时间戳了,下面我来给大家分享一下时间戳函数 strtotime用法。获取指定的年月日转化为时间戳:pHP时间戳函数获取指定...

    Javascript模仿php中strtotime()函数实现时间字符串转时间戳方法

    document.write(strtotime('last month')); document.write(strtotime('+1 weeks')); document.write(strtotime('+1 WEEK')); document.write(strtotime('+8 Days')); document.write(strtotime('-3 Hours 2 seconds...

    php 深入理解strtotime函数的使用详解

    `strtotime()` 在处理 "month" 关键词时,例如 "last month" 或 "-1 month",会基于当前日期来计算。但是需要注意的是,`strtotime("-1 month")` 在某些情况下可能会导致预期之外的结果,因为 PHP 会根据当前日期的...

    PHP strtotime函数详解

    `strtotime()` 是 PHP 中一个非常实用的函数,它能够将英文文本表示的日期时间解析成 Unix 时间戳。Unix 时间戳是从 1970 年 1 月 1 日 00:00:00 GMT 开始的秒数。`strtotime()` 函数的格式如下: ```php int ...

    php强大的时间转换函数strtotime

    使用strtotime可以将各种格式的时间字符串转换为时间戳 转换常规时间格式 echo date('Y-m-d H:i:s', strtotime('2016-01-30 18:00')).PHP_EOL; echo date('Y-m-d H:i:s', strtotime('20160130180001')).PHP_EOL; ...

    php使用date和strtotime函数输出指定日期的方法

    在PHP编程中,date和strtotime函数是处理日期和时间的常用工具。date函数用于格式化日期,而strtotime函数则可以解析英文文本的日期描述,并转换成Unix时间戳。Unix时间戳是一个自1970年1月1日(UTC/GMT的午夜)开始...

    php中strtotime函数用法详解

    $timeStamp = strtotime("now +1 month"); ``` 这里的字符串参数 `"now +1 month"` 就是描述我们要计算的未来时间。在PHP中,`"now"` 代表当前时间。 ### 参数的灵活性 strtotime函数非常灵活,它能识别多种日期...

    PHP中strtotime函数使用方法分享

    在PHP编程语言中,`strtotime()`函数是一个非常实用的日期时间处理函数,它能够将英文文本格式的日期或时间描述转换成Unix时间戳。Unix时间戳是从1970年1月1日(UTC/GMT的午夜)开始所经过的秒数,不包括闰秒。了解...

    深入解析PHP 5.3.x 的strtotime() 时区设定 警告信息修复

    关于PHP 5.3.x版本中的strtotime()函数时区设定警告信息修复的知识点,可以从以下几个方面进行详细解析: 1. PHP版本与时区问题 在新版本的PHP中,特别是PHP 5.3.x版本,PHP内核对时区的处理变得更加严格。开发者...

    PHP中strtotime函数使用方法详解

    在PHP编程语言中,`strtotime()`函数是一个非常实用的工具,它能够将各种英文文本表述的日期和时间解析成Unix时间戳。Unix时间戳是从1970年1月1日(UTC/GMT的午夜)开始所经过的秒数,不包括闰秒。这个函数的灵活性...

    PHP使用strtotime获取上个月、下个月、本月的日期

    $lastday = date("Y-m-d", strtotime("$firstday +1 month -1 day")); return array($firstday, $lastday); } ``` 这个函数首先获取指定日期的月份的第一天,然后通过加1个月再减去1天来得到该月的最后一天。 ...

    php中strtotime函数性能分析

    在PHP中,`strtotime()`函数是一个非常实用的工具,它能够将各种格式的日期和时间字符串转换为Unix时间戳,这是一种自1970年1月1日以来的秒数表示。然而,如标题和描述中提到的,`strtotime()`在处理大量数据和复杂...

    PHP时间日期增减操作示例【date strtotime实现加一天、加一月等操作】

    同样的,我们可以用`strtotime`函数实现加一个月、加一年的操作,只需将字符串中的`day`替换为`month`或`year`即可。 除了基本的加减,还可以进行更复杂的日期操作,如获取今天、昨天、明天的日期: ```php echo ...

    PHP中时间加减函数strtotime用法分析

    $date_previous_month = date('Y-m-d', strtotime("-$months_to_add months", strtotime($date))); // 减一个月 ?&gt; ``` 注意:这种方法可能在涉及到非30天的月份时会有问题,比如从2月到3月跨越闰年时。 ### 其他...

    node-strtotime:节点StrToTime函数

    节点StrToTime函数。 这段代码是由从。 这是原始代码的简单分支,但主要区别在于未扩展Date.prototype范围。 例子 var strtotime = require('strtotime'); strtotime('1 week'); strtotime('next friday'); ...

Global site tag (gtag.js) - Google Analytics