添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
傲视众生的白开水  ·  nodejs ...·  1 年前    · 

开发工作中可能会需要做一些统计数据,例如今日、昨日、最近7天、最近30天的订单量,或一个月之前、一个月之后的日期等,通常我们也会需要获取到某一天的开始时间戳或结束时间戳。strtotime()、mkdir()为输出时间戳,date()为输出具体日期:

首先说明一下date()函数的格式(timestamp为时间戳):

date('Y-m-d',timestamp); 
//输出年--date('Y-m-d H:i:s',timestamp); 
//输出年--日 时:分:秒

php获取今天日期

date("Y-m-d",strtotime("today")); 
//strtotime(‘today’)输出今天的开始时间戳
// 或date("Y-m-d",time()); 
//time()输出当前秒时间戳
// 或date("Y-m-d"); 
//第二个参数不填默认当前时间

php获取昨天日期

date("Y-m-d",strtotime("-1 day")); 
// 或 date("Y-m-d",strtotime("yesterday"));

php获取明天日期

date("Y-m-d",strtotime("+1 day"));
// 或 date("Y-m-d",strtotime("tomorrow "));

php获取7天后日期

date("Y-m-d",strtotime("+7 day"));

php获取30天后日期

date("Y-m-d",strtotime("+30 day"));

php获取一周后日期

date("Y-m-d",strtotime("+1 week"));

php获取本周起始日期

echo date("Y-m-d H:i:s",mktime(0, 0 , 0,date("m"),date("d")-date("w")+1,date("Y"))),"\n";echo date("Y-m-d H:i:s",mktime(23,59,59,date("m"),date("d")-date("w")+7,date("Y"))),"\n";

php获取一个月后日期

date("Y-m-d",strtotime("+1 month"));

php获取一个月前日期

date("Y-m-d",strtotime("last month")); 
// 或 date("Y-m-d",strtotime("-1 month"));

php获取一年后日期

date("Y-m-d",strtotime("+1 year"));

php获取一周零两天四小时五分钟两秒后时间

date("Y-m-d H:i:s",strtotime("+1 week 2 days 4 hours 5 minute 2 seconds"));
  • php获取下个星期五日期 (下周五这个有时会出问题,比如现在还不到周五,这样得到的下周五的时间会和本周五一样)
  • date("Y-m-d",strtotime("next Friday"));
    

    php获取上个周一日期

    date("Y-m-d",strtotime("last Monday"));
    

    php获取今天起止时间戳

    date('Y-m-d 00:00:00');
    // 或mktime(0,0,0,date('m'),date('d'),date('Y'));
    

    php获取昨天起止时间戳

    date('Y-m-d 00:00:00',strtotime("-1 day"));
    // 或mktime(0,0,0,date('m'),date('d')-1,date('Y'));
    

    php获取上周起止时间戳

    // 上周开始$begin = mktime(0, 0, 0, date('m'), date('d') - date('w') + 1 - 7, date('Y'));date('Y-m-d H:i:s', $begin);
    // 上周结束$end = mktime(23, 59, 59, date('m'), date('d') - date('w') + 7 - 7, date('Y'));date('Y-m-d H:i:s', $end);
    

    php获取本月起始时间戳

    date('Y-m-01 00:00:00');
    // 或mktime(0,0,0,date('m'),1,date('Y'));
    

    php获取本月结束时间戳 (注意 t 参数的妙用,获取本月包含的天数)

    date('Y-m-t 23:59:59');
    // 或mktime(23,59,59,date('m'),date('t'),date('Y'));
    

    因为date函数非常强大,还可以获取其他格式的数据:

    格式化方式说明
    Y年。4位数字年,如1999
    y年。二位数字,如:99
    m数字月份,前面有前导0,如01。n 为无前导0数字月份
    F月份,完整的文本格式,例如 January 或者 March
    M三个字母缩写表示的月份,例如 Jan 或者 Mar
    d月份中的第几天,前面有前导0,如03。j 为无前导0的天数
    w星期中的第几天,以数字表示,0表示星期天
    z年份中的第几天,范围0-366
    W年份中的第几周,如第32周
    H24小时格式,有前导0,h为12小时格式
    G24小时格式,无前导0,g为对应12小时格式
    i分钟格式,有前导0
    s秒格式,有前导0
    A大写上下午,如AM,a为小写
    tt - 给定月份中包含的天数

    时间戳和时间字符串

    基本函数使用说明

    使用 time() 函数,会获取当前时间的 Unix 时间戳,是一个10位的整数,表示自 Unix 纪元(1月1日 1970 00:00:00 GMT)起的当前时间的秒数。

    使用 strtotime() 函数,可以将任何英文文本的日期或时间描述解析为 Unix 时间戳。失败则返回 FALSE。应该尽可能使用 YYYY-MM-DD 格式或者使用 date_create_from_format() 函数

    使用 date() 函数,可以将时间戳按照指定的格式格式化为时间字符串

    $time = time(); // 当前时间戳
    var_dump($time);  // int(1516155874)
    $time_str = date('Y-m-d H:i:s', $time); // 将时间戳转化为相应的时间字符串
    var_dump($time_str);  // string(19) "2018-01-17 02:24:34"
    $time_int = strtotime($time_str);  // 将时间字符串转化为时间戳
    var_dump($time_int); // int(1516155874)
    

    常用时间获取

    获取那种基于某个时间一定时间段的时间的做法,可以使用 strtotime(),也可以 time() 获取当前时间然后加上或减去指定时间距离现在的偏移秒数。

  • 获取前一天的时间戳:strtotime('-1 day') 或者 time() - 3600 * 24
  • 获取今天凌晨0点的时间戳:strtotime(date("Y-m-d"), time())
  • 获取今天某个时刻如6点半的时间戳: strtotime(data('Y-m-d')) + 6 * 3600 + 30 * 60
  • 数据库查询注意事项

    在数据库中保存为 timastamp 或者 datetime 类型的数据,在PHP中查询时,需要使用时间字符串进行查询,而且查询结果也是时间字符串。

    另外如果是使用 int 类型保存的时间戳,则要使用时间戳进行查询。查询结果是时间戳。

    PHP指定时间戳加上1天,1周,1月

    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('+1second'));//当前时间戳+1秒 2017-01-09 21:04:12 echo date('Y-m-d H:i:s',strtotime('+1minute'));//当前时间戳+1分 2017-01-09 21:05:11 echo date('Y-m-d H:i:s',strtotime('+1hour'));//当前时间戳+1小时 2017-01-09 22:04:11 echo date('Y-m-d H:i:s',strtotime('+1day'));//当前时间戳+1天 2017-01-10 21:04:11 echo date('Y-m-d H:i:s',strtotime('+1week'));//当前时间戳+1周 2017-01-16 21:04:11 echo date('Y-m-d H:i:s',strtotime('+1month'));//当前时间戳+1月 2017-02-09 21:04:11 echo date('Y-m-d H:i:s',strtotime('+1year'));//当前时间戳+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 $t=1483967416;//指定时间戳 echo $dt=date('Y-m-d H:i:s',$t);//2017-01-09 21:10:16 /*方法一*/ echo date('Y-m-d H:i:s',$t+1*24*60*60);//指定时间戳+1天 2017-01-10 21:10:16 echo date('Y-m-d H:i:s',$t+365*24*60*60);//指定时间戳+1年 2018-01-09 21:10:16 /*方法二*/ //$dt是指定时间戳格式化后的日期 echo date('Y-m-d H:i:s',strtotime("$dt+1day"));//指定时间戳+1天 2017-01-10 21:10:16 echo date('Y-m-d H:i:s',strtotime("$dt+1year"));//指定时间戳+1年 2018-01-09 21:10:16 /*方法三*/ //$t是指定时间戳 echo date('Y-m-d H:i:s',strtotime("+1day",$t));//指定时间戳+1天 2017-01-10 21:10:16 echo date('Y-m-d H:i:s',strtotime("+1year",$t));//指定时间戳+1年 2018-01-09 21:10:16 //指定时间戳加1月、1周、1小时、1分、1秒原理同上;

    1.取时间间隔天时分秒

    /*取时间间隔天时分秒*/
    function timeDiff($unixTime_2, $unixTime_1) {
    	$timediff = abs($unixTime_2 - $unixTime_1);
    	//计算天数
    	$days = intval($timediff / 86400);
    	//计算小时数
    	$remain = $timediff % 86400;
    	$hours = intval($remain / 3600);
    	//计算分钟数
    	$remain = $remain % 3600;
    	$mins = intval($remain / 60);
    	//计算秒数
    	$secs = $remain % 60;
    	return ['day' => $days, 'hour' => $hours, 'min' => $mins, 'sec' => $secs];
    

    2.取时间间隔

    function time_jj($unixTime_2, $unixTime_1) {
    	//取日间间隔,参数只许传入字符串,取日期差,如果2018-01-02
    	// time_jj取日期差,当前时间,数据库时间
    	// date_default_timezone_set('prc'); //这是设置时间北京
    	// 时间格式date('Y-m-d H:i:s',time())
    	$unixTime_2 = strtotime(date('Y-m-d', strtotime($unixTime_2)));
    	$unixTime_1 = strtotime(date('Y-m-d', strtotime($unixTime_1)));
    	$timediff = abs($unixTime_2 - $unixTime_1);
    	//计算天数
    	$days = intval($timediff / 86400);
    	return $days;
    //echo time—jj(date('Y-m-d',time()),"2018-06-17 03:30:08");
    //echo "<br>
    

    3.取间隔分钟差

    //取分钟差,参数只许传入字符串,如果2018-01-02 03:03:30
    function time_ff($unixTime_2, $unixTime_1) {
    	// 时间格式date('Y-m-d H:i:s',time())
    	// time_ff取分钟差,当前时间,数据库时间
    	$unixTime_2 = strtotime($unixTime_2);
    	$unixTime_1 = strtotime($unixTime_1);
    	$timediff = abs($unixTime_2 - $unixTime_1);
    	//计算天数
    	$days = intval($timediff / 86400);
    	//计算小时数
    	$remain = $timediff % 86400;
    	$hours = intval($remain / 3600);
    	//计算分钟数
    	$remain = $remain % 3600;
    	$mins = intval($remain / 60);
    	return $mins;
    

    \

    分类:
    后端
  •