今天我爱编程网小编整理了php 指定时间退后或提前N个月的函数怎么写相关信息,希望在这方面能够更好帮助到大家。
本文目录一览:

PHP加月份的bug问题
这本身算是PHP的一个bug,就是如果本月有31天,那么在本月31日的基础上增加(或减少)n个月,如果目标月份的天数少于31,那么就会把相差的天数累加到下一个月,比如今天是2019-7-31,有31日,那么增加一个月就是2019-8-31,这个没问题,但如果是增加两个月,按理是2019-9-31,但9月是30天,那么就变成2019-10-1了。2月份是个特殊月份,只有28天或29天,如果目标月份刚好是2月,误差就会更大(而且即使当前月份的天数是30,遇到目标月份是2月也一样会有误)。
解决办法最好是自己写个处理月份加减的函数,比如当要计算的日期是29、30、31时,就要做特殊的处理,其他日期就按正常方法处理。下面是处理要计算的日期是31时的方法,其他日期自己处理:
date('Y-m-d', strtotime('last day of +2 month',strtotime('2019-12-31')))

php 指定时间退后或提前N个月的函数怎么写
/**
* 返回某个时间几月前或及月后的时间戳
* @$datetime 指定时间戳
* @$num 增减月份(1,-2)
* @return datetime
*/
public static function getEveryMonth($datetime,$num){
$year_month = date("Y-m",$datetime);
$time_day = date("d",$datetime);
$H = date("H",$datetime);
$i = date("i",$datetime);
$s = date("s",$datetime);
if($num>0){
$act = "+".abs($num)." month";
}else{
$act = "-".abs($num)." month";
}
$time = strtotime($act,strtotime($year_month));
$time_str = date("Y-m-d",$time);
if(date("t",$time)>$time_day){
$return_time = mktime($H,$i,$s,date("m",$time),date("d",$time),date("Y",$time));
}else{
$return_time = mktime($H,$i,$s,date("m",$time),date("t",$time),date("Y",$time));
}
return $return_time;
}
我爱编程网
php 时间加减问题,比如我的时间:$date_t=$_post[date_t] 我需要输出这个时间的二天,或者加一天,怎么写
我爱编程网(https://www.52biancheng.com)小编还为大家带来php 时间加减问题,比如我的时间:$date_t=$_post[date_t] 我需要输出这个时间的二天,或者加一天,怎么写的相关内容。
这个,你要知道,时间戳的概念不??
php读取的时候就是用时间戳的。
$time = time();
这个代码实现的就是 获取当前的时间戳,如果你要根据本地的时间再加上2天或1天的话,
可以用js的函数解读时间戳。
//功能:检查日期格式是否是有效格式
function checkIsValidDate(str)
{
if(str == "") //如果参数为空,则返回false
return false;
var arrDate = str.split("-"); //把参数用split函数分割成数组,它等同与PHP中的explode函数
if(parseInt(arrDate[0],10) < 100) //如果年份小于100,则表示是21世纪
arrDate[0] = 2000 + parseInt(arrDate[0],10) + "";
var date = new Date(arrDate[0],(parseInt(arrDate[1],10) -1)+"",arrDate[2]); //格式化为日期格式
if(date.getYear() == arrDate[0] //判断格式化后日期的年,月,日是否和参数的相等,相等则是有效格式
&& date.getMonth() == (parseInt(arrDate[1],10) -1)+""
&& date.getDate() == arrDate[2])
return true;
else
return false;
}
//功能:检查开始时间是否小于结束日期
//参数:strStart 开始日期,strEnd 结束日期
function checkDateEarlier(strStart,strEnd)
{
if(checkIsValidDate(strStart) == false || checkIsValidDate(strEnd) == false)
return false; //检查日期格式是否有效
if (( strStart == "" ) || ( strEnd == "" )) //检查日期是否为空
return false;
var arr1 = strStart.split("-");
var arr2 = strEnd.split("-");
var date1 = new Date(arr1[0],parseInt(arr1[1].replace(/^0/,""),10) - 1,arr1[2]);
var date2 = new Date(arr2[0],parseInt(arr2[1].replace(/^0/,""),10) - 1,arr2[2]);
if(arr1[1].length == 1) //将月份格式化为08这种形式
arr1[1] = "0" + arr1[1];
if(arr1[2].length == 1) //将日格式化为08这种形式
arr1[2] = "0" + arr1[2];
if(arr2[1].length == 1) //将月份格式化为08这种形式
arr2[1] = "0" + arr2[1];
if(arr2[2].length == 1) //将日格式化为08这种形式
arr2[2]="0" + arr2[2];
var d1 = arr1[0] + arr1[1] + arr1[2]; //将开始日期组合成一个字符串
var d2 = arr2[0] + arr2[1] + arr2[2]; //将结束日期组合成一个字符串
if(parseInt(d1,10) > parseInt(d2,10)) //将两个字符串转化成整数,如果d1>d2则开始日期大于结束日期
return false;
else
return true;
}
以上,就是我爱编程网小编给大家带来的php 指定时间退后或提前N个月的函数怎么写全部内容,希望对大家有所帮助!更多相关文章关注我爱编程网:
www.52biancheng.com免责声明:文章内容来自网络,如有侵权请及时联系删除。