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

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

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

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


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 计算两个日期之间相隔月数、每月开始日期、结束日期,开始时间戳,结束时间戳” 的相关文章

月薪3万的程序员都避开了哪些坑

月薪3万的程序员都避开了哪些坑

程序员薪水有高有低,有的人一个月可能拿30K、50K,有的人可能只有2K、3K。同样有五年工作经验的程序员,可能一个人每月拿20K,一个拿5K。是什么因素导致了这种差异?我特意总结了容易导致薪水低的九大行为表现,避开这些大坑,你就离高薪不远了。习惯即刻回报他不懂得只有春天播种,秋天才会有收获。刚刚付...

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

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

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

JQ 获取验证码倒计时方法

JQ 获取验证码倒计时方法

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

使用FastClick消除IOS点击延时提高程序的运行效率

FastClick是一个非常方便的库,在移动浏览器上发生介于轻敲及点击之间的指令时,能够让你摆脱300毫秒的延迟。FastClick可以让你的应用程序更加灵敏迅捷。支持各种移动浏览器,比如Safari、Chrome、Opera等。FastClick 是一个简单,易于使用的JS库用于消除在移动浏览器上...

ios5的safari浏览器的电话号码识别功能的禁用

更详细的apple官方文档: https://developer.apple.com/library/safari/#featuredarticles/iPhoneURLScheme_Reference/Articles/PhoneLinks.html在编写 HTML 时,有一个 meta...

jquery给url新增、修改、查询

(function ($) {  $.extend({   Request: function (m) {    var sValue = loca...

发表评论

访客

看不清,换一张

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