date 时间函数

1、时区的设置

① date_default_timezone_set('PRC');// "Asia/Shang"、"Asia/Chongqing"、"Etc/GMT-8"或 PRC 等中的一个;
② 修改php.ini,date.timezone = PRC 开启


2、返回当前Unix时间戳的微妙数: 

microtime()        //返回当前 Unix 时间戳的微秒数
microtime(true)    //返回一个浮点数    

1s=1000ms(毫秒)
1s=1000000us(微秒)


3、set_time_limit(秒数); 

    规定从该句运行时起程序必须在指定秒数内运行结束, 超时则程序出错退出. 


4、函数针对指定的年份和日历,返回一个月中的天数:

var_dump( cal_days_in_month(CAL_GREGORIAN,06,2017) );
var_dump( cal_days_in_month(CAL_GREGORIAN,6,2017) );
var_dump( date('t', strtotime('2017-06')) );


5、php判断日期格式是否正确

checkdate(月,日,年);   // 用于验证格利高里日期(Gregorian date),返回逻辑真或逻辑假. 
如果:
[1]年在1900和32767之间(包括1900与32767);
[2]月在1到12之间;
[3]日在该月的允许日数范围内(考虑了闰年);
则返回逻辑真.

例:
    checkdate(month,day,year);
var_dump(checkdate(2,29,2003));     //false
var_dump(checkdate(2,29,2004));     //true


//封装的一个函数,判断时间是否正确
var_dump( is_date("2003-02-28 23:59:60"));          //is_date()时间格式   如:2003-02-28 23:59:60
function is_date($date){
    if($date == date('Y-m-d H:i:s',strtotime($date))){
        return true;
    }else{
        return false;
    }
}


//验证日期是否合理
function check_datetime($datetime)
{
    if (date('Y-m-d H:i:s', strtotime($datetime)) === $datetime) {
        return true;
    } else {
        return false;
    }
}


6、获取指定日期

strtotime()   函数将任何英文文本的日期或时间描述解析为 Unix 时间戳(自 January 1 1970 00:00:00 GMT 起的秒数)

mktime(hour,minute,second,month,day,year);    返回一个日期的 UNIX 时间戳


获取今天凌晨的时间戳:

mktime(0, 0, 0)

获取当前时间戳:

time()

获取今天 00:30:00时间戳:

mktime(0,30,0,date('m'),date('d'),date('Y'))

获取指定时间的时间戳:

$tm = strtotime("2017-12-07");

echo mktime(0,30,0,date('m',$tm),date('d',$tm),date('Y', $tm))



echo date('Y-m-d H:i:s',strtotime('now'));//当前时间戳 2017-01-09 21:04:11

echo date('Y-m-d H:i:s',strtotime('+1 second'));//当前时间戳+1秒 2017-01-09 21:04:12

echo date('Y-m-d H:i:s',strtotime('+1 minute'));//当前时间戳+1分 2017-01-09 21:05:11

echo date('Y-m-d H:i:s',strtotime('+1 hour'));//当前时间戳+1小时 2017-01-09 22:04:11

echo date('Y-m-d H:i:s',strtotime('+1 day'));//当前时间戳+1天 2017-01-10 21:04:11

echo date('Y-m-d H:i:s',strtotime('+1 week'));//当前时间戳+1周 2017-01-16 21:04:11

echo date('Y-m-d H:i:s',strtotime('+1 month'));//当前时间戳+1月 2017-02-09 21:04:11

echo date('Y-m-d H:i:s',strtotime('+1 year'));//当前时间戳+1年 2018-01-09 21:04:11

echo date('Y-m-d H:i:s',strtotime('+12year 12month 12day 12hour 12minute 12second'));

//当前时间戳+12年,12月,12天,12小时,12分,12秒 2030-01-22 09:16:23



用PHP打印出昨天、明天的时间:

date("Y-m-d ",strtotime(" -1 day"));//昨天

date("Y-m-d ",strtotime(" +1 day")); //明天


获取指定下星期几的时间戳:

echo date('Y-m-d H:i:s',strtotime('next thursday'))."<br>";

echo date('Y-m-d H:i:s',strtotime('last thursday'));


//获取当月的第一天和最后一天

$BeginDate= date('Y-m-01', strtotime(date("Y-m-d")));                //获取当月第一天

$EndDate  = date('Y-m-d', strtotime("$BeginDate +1 month -1 day"));    //获取当月最后一天


$startTime= strtotime('-0 month', strtotime(date('Y-m-01 00:00:00')));

$endTime  = strtotime('+1 month', $startTime) - 1;


$startTime =  strtotime(date('Y-m-01'));                                //当月第一天的时间戳

$endTime   =  strtotime(date('Y-m-t 23:59:59'));                    //当月最后一天的时间戳


获取今日开始时间戳和结束时间戳

$beginToday= mktime(0,0,0,date('m'),date('d'),  date('Y'));

$endToday  = mktime(0,0,0,date('m'),date('d')+1,date('Y'))-1;


获取昨日起始时间戳和结束时间戳

$beginYesterday= mktime(0,0,0,date('m'),date('d')-1,date('Y'));

$endYesterday  = mktime(0,0,0,date('m'),date('d'),  date('Y'))-1;


获取上周起始时间戳和结束时间戳

$beginLastweek = mktime( 0, 0, 0,date('m'),date('d')-date('w')+1-7,date('Y'));

$endLastweek   = mktime(23,59,59,date('m'),date('d')-date('w')+7-7,date('Y'));


获取本月起始时间戳和结束时间戳

$beginThismonth= mktime(0, 0,  0,date('m'),           1,date('Y'));

$endThismonth  = mktime(23,59,59,date('m'),date('t'),date('Y'));


获取上个月第一天及最后一天:

date('Y-m-01', strtotime('-1 month'));

date('Y-m-t',   strtotime('-1 month'));



指定日期加一个月 php指定时间戳加1月:

echo date("Y-m-d H:i:s",strtotime("+2 months", strtotime("2016-09-01")));

echo date("Ym", mktime(0,0,0,date('m', time())-2,1,date("Y", time())));


//获取当月、上个月 指定的哪一天

$startTime = strtotime( date('Y-m-25 00:00:00', strtotime('-1 month')) );//上个月25号

$endTime  = strtotime( date('Y-m-25 23:59:59') );//本月25号


获取指定日期的前一天

$date= date('Y-m-d', strtotime('-1 day', strtotime("2015-08-09")));

获取当前日期的 一周后的时间

$today   = date('Y-m-d');

$thedays = date("Y-m-d",strtotime("+1 week",strtotime($today)));


//获取指定时间戳的当月、上个月 指定的哪一天

$startTime = strtotime( date('Y-m-25 00:00:00', strtotime("-1month",strtotime("2017-11-02"))) );//指定时间戳的上个月25号

$endTime   = strtotime( date('Y-m-25 23:59:59',strtotime("2017-11-02")) );//指定时间戳月份的25号


获取指定日期的上一个月:

$a= "2016-01";

$date= date('Y-m', strtotime('-1 month', strtotime($a)));



获取最近的三个月:

$month                 =         date('Ym');

$month_a              =         date('Ym',mktime(0,0,0,date('m')-1,1,date('Y')));

$month_b              =         date('Ym',mktime(0,0,0,date('m')-2,1,date('Y')));

$anchorMonthInfo    =      array( $month,$month_a,$month_b );




/**
* 返回 $tm 时间对应的周
* 周格式 Yw   哪一年的第几周
*/
function DateWeek($tm)
{
    $w = date('w', $tm) ==0 ? 7 : date('w', $tm);
    if(date('W', $tm) >= 52) // 用周一
    {
        $date = $tm -($w-1)*24*3600 ;
    }
    else // 用周日
    {
        $date = $tm + (7-$w)*24*3600;
    }
    return date("YW", $date);
    
}


//封装获取指定时间的当月开始时间
function makeMonthTime($monthNum, $timeNow = 0) 
{
    if (! $timeNow)
    {
        $timeNow = time();
    }
    $rettm = mktime(0,0,0, date('m', $timeNow)+ $monthNum, 1, date('Y', $timeNow));
    return $rettm;
}
$time1        = makeMonthTime(-1, time());  //汇总上个月开始数据
$time2        = makeMonthTime(0, time());   //汇总当月结束数据
var_dump(date('Y-m-d H:i:s',$time1));       //string '2017-10-01 00:00:00' (length=19)
var_dump(date('Y-m-d H:i:s',$time2));       //string '2017-11-01 00:00:00' (length=19)


//获取下一个3天,排除特定日期,可用在有特殊时间限制的时间上面;如送货
$restDay = array(
    // 中秋
    '2015-09-27',
    // 国庆
    '2015-10-01',
    '2015-10-02',
    '2015-10-03',
    '2015-10-04'
);
$day = date("Y-m-d");
$days = array();
do {
    // 如果当天是休息,不送货
  if (! in_array($day,$restDay)) {
   	$days[] = $day;
  }
   
  // 向后一天
  $day = date('Y-m-d', strtotime('+1 day', strtotime($day)));
} while (count($days) < 3);
var_dump($days);

第二种方式
$day=date('Y-m-d',time());
$dates=array();
$restDay = array(
    // 国庆
  '2015-12-07',
  '2017-11-01',
);
for ($i=1;count($dates)<=2;$i++){
  $date =date('Y-m-d', strtotime('+' . $i . ' day', strtotime($day)));
  array_push($dates, $date);
  foreach ($dates as $key => $value) {
	foreach ($restDay as $k => $v) {        //查找所有需过滤的日期
   	    if ($value==$v) {
		array_splice($dates,$key,1);        //依次过滤掉不操作的日期
	    }
	}
    }
}
var_dump($dates);


设定一个开始日期,循环遍历30天以后的日期
$datas=array();
$starttime ='2015-11-05';
for($i = 0;$i<30;$i++){
    $datas[$i]['day'] = $starttime;
    $starttime =date("Y-m-d",strtotime($starttime)+24*3600);
}
var_dump($datas);



冷暖自知一抹茶ck



参数为指定年份指定周,获取该指定周的 开始时间结束时间戳

function getTimestampByYearAndWeek($year, $week, $startOfWeek = 'sun') {
    $timestamp = strtotime("{$year}-W{$week}-1", strtotime("{$year}-01-01"));
    if ($startOfWeek == 'sun') {
        $timestamp -= 86400;
    }
    $endOfWeek = $timestamp + (7 * 86400);
    return array($timestamp, $endOfWeek);
}
$year = '2023';
$week = '20';
$startOfWeek = 'sun';
$startTimestamp = getTimestampByYearAndWeek($year, $week, $startOfWeek)[0];
$endTimestamp = getTimestampByYearAndWeek($year, $week, $startOfWeek)[1];
echo "开始时间戳: {$startTimestamp}\n";echo "结束时间戳: {$endTimestamp}\n";


冷暖自知一抹茶ck
请先登录后发表评论
  • 最新评论
  • 总共0条评论