计算指定日期的前几天,几个月或者几年的函数
$a = '2014/08/21';
echo date( "Y-m-d", strtotime( "-6 month ".$a."" ) );
获得当前月的制定日期,比如说20号的
echo date('Y-m-20 H:i:s',time());
获得系统时间前一个月的第一天
echo 'next_1='.date( "Y-m-1", strtotime( "-1 month".date("Y-m-d",time())."" ) ).'<br>';
获得系统时间前一个月的最后一天
echo 'next_20='.date( "Y-m-t", strtotime( "-1 month".date("Y-m-d",time())."" ) );
注意:曾经遇到过这样的问题,
$sagyoYmd = '2014-11-29';
$sy_sagyo_ymd_max = date( "Y-m-1", strtotime(".$sagyoYmd.") );
$sy_sagyo_ymd_max = date( "Y-m-1", strtotime( "-0 month".$sagyoYmd."" ) );
$sy_sagyo_ymd_max = date( "Y-m-1", strtotime($sagyoYmd) );
输出当天某个时间点的时间戳:
strtotime("01:00:00")<=time()&& time()<=strtotime("02:00:00")
一个时间跨度的算法,计算一个时间,加上一个int类型的区间,如果是节日,周末就跳过,否者就累加:
function GetSyori_Yotei($koCd){
$time_count = "";
$i = 0;
$con=dbcon();
while(true){
$furikomi_syori = "";
//得出系统时间的第二天的星期数
$syori_w = date("w", strtotime("+1 day")+ 86400*$i);
//得出系统时间的第二天的年-月-日
$syori_check = date("Y-m-d", strtotime("+1 day")+ 86400*$i);
//对上面得出的这个时间进行验证,是否属于一个节假日
$holiday_name_syori = holidayCheck($syori_check);
if($syori_w!="6" && $syori_w!="0" && empty($holiday_name_syori)){
$furikomi_syori = date("Y-m-d", strtotime("+1 day") + 86400*$i);
////振込予定日 -----------------start
//SPS申請振込間営業日数
$sps_days = GetSps_days($koCd);
$j = 1;
$k = 0;
$con=dbcon();
if($sps_days <= "0" || $sps_days ==null){
//振込予定日 = 振込処理日
$furikomi_yotei = $furikomi_syori;
}
while($k < $sps_days){
$yotei_w = date("w", strtotime("+1 day") + 86400*$i + 86400*$j);
$yotei_check = date("Y-m-d", strtotime("+1 day")+ 86400*$i + 86400*$j);
$holiday_name_yotei = holidayCheck($yotei_check);
if($yotei_w!="6" && $yotei_w!="0" && empty($holiday_name_yotei)){
$furikomi_yotei = date("Y-m-d", strtotime("+1 day") + 86400*$i + 86400*$j);
}else{
$j++;
continue;
}
$k++;
$j++;
}
////振込予定日 -----------------end
break;
}
$i++;
}
$time_count = $furikomi_syori.':'. $furikomi_yotei;
return $time_count;
}
/** yyyy-mm-dd =>dd;
* 1 - 31
* **/
function Day($time){
$Day = "";
if(!empty($time)){
$Day = date("j",strtotime($time));
}
return $Day;
}
/** yyyy-mm-dd =>dd;
* 2001
* **/
function Year($time){
$Year = "";
if(!empty($time)){
$Year = date("Y",strtotime($time));
}
return $Year;
}
/** yyyy-mm-dd =>mm;
* 01-12
* **/
function Month($time){
$Month = "";
if(!empty($time)){
$Month = date("m",strtotime($time));
}
return $Month;
}
输出的结果,在某些环境下竟然是不一样的情况,就是因为多加了个双引号和‘..’导致的,因此,这里需要注意
自己写的一个关于时间计算的函数,一个给定的时间,加一个月,加一年,减一个小时等。
/**yyyy-mm-dd =>yyyy-mm+1-dd;
* 1995-1-31 => 1995-2-28
* **/
function DateAdd($interval,$number,$time){
$dateadd = "";
if(!empty($time)){
$param = $number ;
if($interval == "h"){
$param .= " hour" ;
}elseif($interval == "m"){
$param .= " month" ;
}elseif($interval == "d"){
$param .= " day" ;
}elseif($interval == "y"){
$param .= " year" ;
}elseif($interval == "w"){
$param .= " week" ;
}elseif($interval == "mi"){
$param .= " minute" ;
}
$dateadd = date( "Y-m-d", strtotime($param.$time) );
}
return $dateadd;
}
调用方法:
DateAdd('m','+1','2016-07-28');
刚好得出时间 :2016-08-28
这里有点东西需要注意,这里的计算是按+30天去算的,如果你的时间是2016-07-31的话,找下一个月就是2016-07-01。