美高梅网址注册-澳门mgm4858集团登录网址
做最好的网站
来自 澳门mgm4858集团登录网址 2020-01-22 12:03 的文章
当前位置: 美高梅网址注册 > 澳门mgm4858集团登录网址 > 正文

下面的方法更准确一些,发现有一个问题

一日,遇到一个问题,求上一个月的今天。 最开始我们使用 strtotime 函数求值,发现有一个问题,月长度不一样的月份的计算结果有误。 比如:2011-03-31,得到的结果是2011-03-03。我们先不追究什么问题,先看如何解决问题。 此时,想起PHP中有一个mktime函数,于是自己写了如下代码:复制代码 代码如下:echo date("Y-m-d H:i:s", mktime, date,date, date - 1, date, date;当执行时,发现结果和strtotime的结果是一样的。还是基于这个函数,既然无法直接操作月,那么我们从天入手,得到上一个月,然后再使用date拼接数据。如下代码:复制代码 代码如下:$time = strtotime;/*** 计算上一个月的今天* @param type $time* @return type*/function last_month_today { $last_month_time = mktime, date, date, date, - 1, date; return date(date("Y-m", $last_month_time) . "-d H:i:s", $time);}echo last_month_today;但是此时又有了另一个问题,不存在2011-02-31这样的日期,怎么办?现在的需求是对于这样的日期显示当月最后一天。 如下代码:复制代码 代码如下:$time = strtotime;/*** 计算上一个月的今天,如果上个月没有今天,则返回上一个月的最后一天* @param type $time* @return type*/function last_month_美高梅网址注册,today{ $last_month_time = mktime, date, date, date, 0, date; $last_month_t = date("t", $last_month_time); if ($last_month_澳门mgm4858集团登录网址,t < date { return date("Y-m-t H:i:s", $last_month_time); } return date(date("Y-m", $last_month_time) . "-d", $time);}echo last_month_today;这里需要注意一点: date(”Y-m”, $last_month_time) . “-d”这段代码。在写代码的过程中如果写成了 “Y-” . date(”m”, $last_month_time) . “-d” 则在跨年的时间上有问题。 这点还是在写这篇文章时发现的。除了这种方法,还可以先算出年月日再拼接字符串,这里就是纯粹的字符串操作了。

输出的结果是2012-03-02;按理说应该是输出2012-02-31????笨蛋2月有31号吗?没,有30号吗,没?有29号吗?..这个..可以有…
PHP给我们处理了这种情况,他会多出几天按下个月来算.
2012年2月最后一天是2012-02-29那么31号比29多两天,所以PHP就累加到下个月来处理 就是2012-03-02啦.
差点忘了..那么星期几怎么算呢??不用算啦..PHP给我们准备好了.
date(‘w’,$strtime);输出的就是一周中的第几天.就是星期几了.

function last_month_day($time){
    $strtime=mktime(date('h',$time),date('i',$time),date('s',$time),date('m',$time)-1,date('d',$time),date('Y',$time));
    echo date('Y-m-d',$strtime);
}
 last_month_day(strtotime("2012-03-31"));

> php -r”echo date(‘Ymd000000′,strtotime ( ‘-1 month’, strtotime ( ’201307310000′ ) ));”
20130701000000#
> php -r”echo date(‘Ymd000000′,strtotime ( ‘-1 month’, strtotime ( ’201308010000′ ) ));”
20130701000000#

echo last_month_today($time);

/**
 * 计算上一个月的今天,如果上个月没有今天,则返回上一个月的最后一天
 * @param type $time
 * @return type
 */
function last_month_today($time){
    $last_month_time = mktime(date("G", $time), date("i", $time),
                date("s", $time), date("n", $time), 0, date("Y", $time));
    $last_month_t =  date("t", $last_month_time);

参数可以从右向左省略,任何省略的参数会被设置成本地日期和时间的当前值。
所以可以通过它来计算

    return date(date("Y-m", $last_month_time) . "-d", $time);
}

 代码如下

函数 mktime,它可以取得日期的时间戳:

本文由美高梅网址注册发布于澳门mgm4858集团登录网址,转载请注明出处:下面的方法更准确一些,发现有一个问题

关键词: