需求背景
PHP程序员在日常开发中经常需要计算各种时间,经常有些比较复杂的,特意整理了以下这些常用的,建议收藏。更多详细的操作函数整合了自取https://github.com/xmgb-cj/date
代码
1. 获取上个月第一天及最后一天
echo date('Y-m-01', strtotime('-1 month')); echo date('Y-m-t', strtotime('-1 month'));
2. 获取当月第一天及最后一天
$BeginDate=date('Y-m-01', strtotime(date(Y-m-d))); echo $BeginDate; echo date('Y-m-d', strtotime($BeginDate +1 month -1 day));
3. 获取当天年份、月份、日及天数
echo 本月共有:.date(t).天; echo 当前年份.date('Y'); echo 当前月份.date('m'); echo 当前几号.date('d');
4. 获取本周的第一天和最后一天
//当前日期 $sdefaultDate = date(Y-m-d); //$first =1 表示m每周星期一为开始日期 0表示每周日为开始日期 $first = 1; //获取当前周的第几天 周日是 0 周一到周六是 1 - 6 $w = date('w', strtotime($sdefaultDate)); //获取本周开始日期,如果$w是0,则表示周日,减去 6 天 $week_start = date('Y-m-d', strtotime($sdefaultDate -.($w ? $w - $first : 6).' days')); //本周结束日期 $week_end = date('Y-m-d',strtotime($week_start +6 days));
5. 判断当前日期是星期几
$weekarray=array(日,一,二,三,四,五,六); echo 星期.$weekarray[date(w)];
6. 计算两个日期相差的天数
<?PHP /** * 求两个日期之间相差的天数 * (针对1970年1月1日之后,求之前可以采用泰勒公式) * @param string $day1 * @param string $day2 * @return number */ function diffBetweenTwoDays ($day1, $day2) { $second1 = strtotime($day1); $second2 = strtotime($day2); if ($second1 < $second2) { $tmp = $second2; $second2 = $second1; $second1 = $tmp; } return ($second1 - $second2) / 86400; } $day1 = 2013-07-27; $day2 = 2013-08-04; $diff = diffBetweenTwoDays($day1, $day2); echo $diff.\n;
提升
1. 整合了一份更强大的时间操作库,自行下载https://github.com/xmgb-cj/date,在部分社交场景的项目中,例如用户发布了一个动态内容,需要人性化的显示发布时间,比如1分钟前,1小时前,1个月前等人性化的显示,这是可以使用库中的以下函数
$time = new Time(); $resp = $time->timeDiff('2020-04-30 12:00:00'); var_dump($resp);
2. 再如计算两个时间的差,得出相差几天、月、季、年,可以使用以下代码得到相差的月份,具体由第二个参数控制。
$date = '2020-01-30'; $month = floor(abs($time->dateDiff($date, 'M')));
3. 判断日期 所属 干支 生肖 星座
$time = new Time(); echo $time->magicInfo('XZ'); //得到今天的星座
总结:
开发中这种时间日期操作函数还是非常多的,还有一个更常用的就是判断指定日期是否工作日,这个在网上的接口大部分不可用,个人建议还是自己维护一份节假日数据表,国家每年发布法定节假日时维护一次就可以了。