当前位置:首页 > 程序心得 > 正文内容

PHP 计算两个日期之间相隔月数、每月开始日期、结束日期,开始时间戳,结束时间戳

admin9年前 (2016-09-22)程序心得1761

在做业务统计计算的时候难免会遇到时间节点问题,一般会涉及的也就是月份、起始日期,然后再数据库做统计查询的时候就会用到时间戳,简单写了下,把代码分享出来,给大家参考,当然有优化的意见,欢迎交流!


PHP:

/**
 * @param $date1
 * @param $date2
 * @return number
 * 计算两个日期相隔月数
 */
function getMonthNum($date1,$date2){
    $date1_stamp=strtotime($date1);
    $date2_stamp=strtotime($date2);
    list($date_1['y'],$date_1['m'])=explode("-",date('Y-m',$date1_stamp));
    list($date_2['y'],$date_2['m'])=explode("-",date('Y-m',$date2_stamp));
    return abs($date_1['y']-$date_2['y'])*12 +$date_2['m']-$date_1['m'];
}

/**
 * php计算两个日期之间相隔月数、每月开始日期、结束日期,开始时间戳,结束时间戳
 */

function get_cal_date($start_date,$end_date){
    $month=getMonthNum($start_date,$end_date);
    for ($m=0;$m<=$month;$m++){
            $start_date=date('Y-m-01', strtotime($start_date));
        $now_time=strtotime($start_date." +$m month"); 
        $data[$m]['title']=date('Y-m', strtotime(date("Y-m-d",$now_time)));
        $begin_date=date('Y-m-01', strtotime(date("Y-m-d",$now_time)));
        $end_date=date('Y-m-d', strtotime("$begin_date +1 month -1 day"));
        $data[$m]['begin_date']=$begin_date;
        $data[$m]['end_date']=$end_date;
        $data[$m]['begin_time']=strtotime($begin_date.' 00:00:00');
        $data[$m]['end_time']=strtotime($end_date.' 23:59:59');
    }
    return $data;
}

使用方法:

get_cal_date("2016-07-01","2017-04-08");


返回输出:

array(10) {
  [0] => array(5) {
    ["title"] => string(7) "2016-07"
    ["begin_date"] => string(10) "2016-07-01"
    ["end_date"] => string(10) "2016-07-31"
    ["begin_time"] => int(1467302400)
    ["end_time"] => int(1469980799)
  }
  [1] => array(5) {
    ["title"] => string(7) "2016-08"
    ["begin_date"] => string(10) "2016-08-01"
    ["end_date"] => string(10) "2016-08-31"
    ["begin_time"] => int(1469980800)
    ["end_time"] => int(1472659199)
  }
  [2] => array(5) {
    ["title"] => string(7) "2016-09"
    ["begin_date"] => string(10) "2016-09-01"
    ["end_date"] => string(10) "2016-09-30"
    ["begin_time"] => int(1472659200)
    ["end_time"] => int(1475251199)
  }
  [3] => array(5) {
    ["title"] => string(7) "2016-10"
    ["begin_date"] => string(10) "2016-10-01"
    ["end_date"] => string(10) "2016-10-31"
    ["begin_time"] => int(1475251200)
    ["end_time"] => int(1477929599)
  }
  [4] => array(5) {
    ["title"] => string(7) "2016-11"
    ["begin_date"] => string(10) "2016-11-01"
    ["end_date"] => string(10) "2016-11-30"
    ["begin_time"] => int(1477929600)
    ["end_time"] => int(1480521599)
  }
  [5] => array(5) {
    ["title"] => string(7) "2016-12"
    ["begin_date"] => string(10) "2016-12-01"
    ["end_date"] => string(10) "2016-12-31"
    ["begin_time"] => int(1480521600)
    ["end_time"] => int(1483199999)
  }
  [6] => array(5) {
    ["title"] => string(7) "2017-01"
    ["begin_date"] => string(10) "2017-01-01"
    ["end_date"] => string(10) "2017-01-31"
    ["begin_time"] => int(1483200000)
    ["end_time"] => int(1485878399)
  }
  [7] => array(5) {
    ["title"] => string(7) "2017-02"
    ["begin_date"] => string(10) "2017-02-01"
    ["end_date"] => string(10) "2017-02-28"
    ["begin_time"] => int(1485878400)
    ["end_time"] => int(1488297599)
  }
  [8] => array(5) {
    ["title"] => string(7) "2017-03"
    ["begin_date"] => string(10) "2017-03-01"
    ["end_date"] => string(10) "2017-03-31"
    ["begin_time"] => int(1488297600)
    ["end_time"] => int(1490975999)
  }
  [9] => array(5) {
    ["title"] => string(7) "2017-04"
    ["begin_date"] => string(10) "2017-04-01"
    ["end_date"] => string(10) "2017-04-30"
    ["begin_time"] => int(1490976000)
    ["end_time"] => int(1493567999)
  }
}


分享到:

扫描二维码推送至手机访问。

版权声明:本文由云河空间发布,如需转载请注明出处。

本文链接:https://yuyunhe.cn/index.php/post/189.html

分享给朋友:

“PHP 计算两个日期之间相隔月数、每月开始日期、结束日期,开始时间戳,结束时间戳” 的相关文章

jQuery ajax使用$(this).parent()无效解决方法

本文章来给各位同学介绍一下关于jQuery ajax使用$(this).parent()无效解决方法,希望此方法对各位同学人有所帮助哦html 代码如下复制代码<p class="item"><input type="text" n...

Thinkphp3.2.x 多图上传几个注意点

1、<form enctype="multipart/form-data">2、<form enctype="multipart/form-data">3、<input type="file...

解决在微信内分享第三方链接标题、图片、摘要、链接等问题

<script src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js"></script> <script> var imgUrl = docum...

多行文字溢出[...]的实现(text-overflow: ellipsis)

多行文字溢出[...]的实现(text-overflow: ellipsis)

对于单行文字, 很简单. Css代码  .oneLine {      width: 200px;      overflow:&...

css做屏幕适配

CSS判断不同分辨率浏览器(显示屏幕)显示不同宽度布局CSS3技术支持IE6到IE8。将用到css3 @media样式进行判断,但IE9以下版本不支持CSS3技术,这里DIVCSS5给大家介绍通过JS实现低版本的浏览器也支持CSS3实现实用布局CSS DIV网页布局中当分辨率小于等于1024px(像...

JQ 获取验证码倒计时方法

JQ 获取验证码倒计时方法

html: <a href="javascript:;" class="weui_btn weui_btn_mini weui_btn_default"  id="show-not...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。