php 关于日期的一些计算
1、strtotime基本使用
date_default_timezone_set('PRC'); //设置中国时区
echo "今天:", date("Y-m-d", time()), "<br>";
echo "昨天:", date("Y-m-d", strtotime("-1 day")), "<br>";
echo "明天:", date("Y-m-d", strtotime("+1 day")), "<br>";
echo "一周后:", date("Y-m-d", strtotime("+1 week")), "<br>";
echo "一周零两天四小时两秒后:", date("Y-m-d G:H:s", strtotime("+1 week 2 days 4 hours 2 seconds")), "<br>";
echo "下个星期四:", date("Y-m-d", strtotime("next Thursday")), "<br>";
echo "上个周一(大概率本周的周一):" . date("Y-m-d", strtotime("last Monday")) . "<br>";
echo "上周一:" . date("Y-m-d", strtotime("-1 week last Monday")) . "<br>";
echo "一个月前:" . date("Y-m-d", strtotime("2018-03-31 last month")) . "<br>";//一个月前:2018-03-03
echo "一个月后:" . date("Y-m-d", strtotime("2018-01-31 +1 month")) . "<br>";//一个月前:2018-03-03
echo "十年后:" . date("Y-m-d", strtotime("+10 year")) . "<br>";
echo '<hr>';
//省略一些参数
echo date('Y-m-d H:i:s'). '<br/>';
echo strtotime(date('Y')),'----',date('Y-m-d H:i:s',strtotime(date('Y'))). '<br/>';//?????? 20:18:00 从哪来的
echo strtotime(date('Y-m')),'----',date('Y-m-d H:i:s',strtotime(date('Y-m'))). '<br/>';//天 01,时分秒均为00
echo strtotime(date('Y-m-d')),'----',date('Y-m-d H:i:s',strtotime(date('Y-m-d'))). '<br/>';//时分秒均为00
echo strtotime(date('Y-m-d H')),'----',date('Y-m-d H:i:s',strtotime(date('Y-m-d H'))). '<br/>';//时间格式不识别
echo strtotime(date('Y-m-d H:i')),'----',date('Y-m-d H:i:s',strtotime(date('Y-m-d H:i'))). '<br/>';//秒为00
2、本月最后一天
$date = '2018-2-17';
echo '本月最后一天:' . date('Y-m-d', strtotime(date('Y-m-01', strtotime('+1 month'))) - 1) . '<br/>';
echo '某月最后一天:' . date('Y-m-d', strtotime(date('Y-m-01', strtotime($date . ' +1 month'))) - 1) . '<br/>';
//某月共多少天,可用于最后一天
echo date('t', strtotime($date)) . '<br>';
3、往后一个月 +1 month逻辑
strtotime +1 month -1 month逻辑:先将日期转换成合法的年月日,如strtotime("2018-02-29 -1 month") 2018-02-29,转换为2018-03-01。+1 month操作为直接将月份+1,再转换为合法的年月日,如2018-01-31 月份加一个月为2018-02-31,转换为合法的日期就是2018-03-03
echo "一个月后:" . date("Y-m-d", strtotime("2018-01-01 +1 month")) . "<br>";
echo "一个月后:" . date("Y-m-d", strtotime("2018-01-31 +1 month")) . "<br>";
echo "一个月后:" . date("Y-m-d", strtotime("2018-02-01 +1 month")) . "<br>";
echo "一个月后:" . date("Y-m-d", strtotime("2018-02-02 +1 month")) . "<br>";
echo "一个月后:" . date("Y-m-d", strtotime("2018-02-28 +1 month")) . "<br>";
echo "一个月后:" . date("Y-m-d", strtotime("2018-02-28 -1 month")) . "<br>";
echo "一个月后:" . date("Y-m-d", strtotime("2018-02-29 -1 month")) . "<br>";
4、获取一周中某天的日期(如周三)
$date = '2018-2-17';
var_dump(getOneDayInWeek(7, $date)); /**
* @desc 获得某一日期所在周(周一到周日)中的某天
* @param int $search 查找星期几,周一 1,周二 2。。。周六 6,周日7
* @param null $date 基准日期
* @return bool|string
*/
getOneDayInWeek($search, $date = NULL) {
$date = !$date ? date('Y-m-d') : date('Y-m-d', strtotime($date));
$search = intval($search);
if ($search < 1 || $search > 7 || !$date) {
return FALSE;
}
$weeks = ['', 'Mon', 'Tues', 'Wed', 'Thur', 'Fri', 'Sat', 'Sun']; $w = (int)date('w', strtotime($date));
$w === 0 && $w = 7;
$search > $w && $flag = ' next ';
$search < $w && $flag = ' last '; return isset($flag) ? date("Y-m-d", strtotime($date . $flag . $weeks[$search])) : $date;
}
5、类似合同中下月减一天,试用期三个月后减一天
$deviationMonth = 1;
$deviationDay = -1;
$date = '2018-10-1';
var_dump(getNextMonth($date, $deviationMonth, $deviationDay)); /**
* @desc 类似合同中下月减一天,试用期三个月后减一天
* 正常 2018-01-17 --- 2018-02-16,2017-10-01---2017-10-31,2017-10-31 --- 2017-11-30
* 2018-01-28 --- 2018-02-27,2018-01-29 --- 2018-02-28,2018-01-30 --- 2018-02-28,2018-01-31 --- 2018-02-28,2018-02-01 --- 2018-02-28,2018-02-02 --- 2018-03-01,2018-02-03 --- 2018-03-02
* @param null $date 起始日期
* @param int $deviationMonth 向后推几个月
* @param int $deviationDay 向后推几天,一般是向前一天(-1)
* @return bool|string
*/
getNextMonth($date = NULL, $deviationMonth = 1, $deviationDay = -1) {
$timestamp = !$date ? time() : strtotime($date);
$deviationMonth = intval($deviationMonth);
$deviationDay = intval($deviationDay);
if (!$deviationMonth || !$deviationDay || !$timestamp) {
return FALSE;
}
$month = date('Y-m', strtotime(date('Y-m', $timestamp) . ' ' . $deviationMonth . ' month'));
$day = date('d', $timestamp) + $deviationDay; $day > date('t', strtotime($month)) && $day = date('t', strtotime($month)); return date('Y-m-d', strtotime($month . '-' . $day));
}
参考
php 关于日期的一些计算的更多相关文章
- 通过jxl 读取excel 文件中的日期,并计算时间间隔
java读取excel里面的日期会出现相差8小时的问题. 比如excel里面有一个日期是:2012-7-2 17:14:03秒,用Cell cell=readSheet.getCell(colNo, ...
- java截取日期范围并计算相差月数
前两天,媳妇单位让整理excel的某一个单元格内两个日期范围的相差月数,本人对excel操作不是很熟练,便写了个小程序计算了一下,原始需求如下: 计算投资期限的范围,并得到期限范围的相差月数 思路1: ...
- Hibernate中HQL的日期差值计算,可计算相差多少秒
最近有个业务需求就是计算订单创建时间离现在超过 4 小时的订单都查找出来! 那么就需要用到日期函数了. 网上找了一下总共的日期函数有一下几个: CURRENT_DATE() 返回数据库当前日期 时间函 ...
- js日期转化(计算一周的日期)
之前做项目的时候遇到过一个日期转化的问题,一个日期控件和近一天,近七天和近一月的的联动效果.发现自己不会,后来就百度了一下解决了这个问题. 现在抽空又写了一个时间转化的案例(计算一周的日期),因为之前 ...
- MVC 下 ajax调用 日期差值计算
背景: 服务项目已有服务期起止时间From-To 现在要根据用户输入的新的起始时间, 和该服务期的原有区间值, 计算出新的服务期截止时间 即 NewServiceToDateTime = NewSer ...
- Python datetime time 等时间 日期 之间的计算和相互转化
from datetime import datetime, date, timedelta, timezone from time import time, ctime, localtime, st ...
- (013)每日SQL学习:日期的各种计算
1.确定两个日期之间的工作日天数 --确定两个日期之间的工作日天数with x0 as (select to_date('2018-01-01','yyyy-mm-dd') as 日期 from du ...
- JS 中的日期时间操作计算实例
实例 一:已知日期格式为 "YYYY/MM/DD",计算相对于今天的天数差. function fromNow(date){ var mTimes = new Date(date) ...
- <更新日期03-31-2016> 复利计算5.0 <已改进>
作业要求: 1.客户说:帮我开发一个复利计算软件. 完成复利公式计算程序,并成功PUSH到github上. 客户提出: 2.如果按照单利计算,本息又是多少呢? 3.假如30年之后要筹措到300万元的养 ...
- Java 日期加减计算.
1.用Java.util.Calender来实现 Calendar calendar=Calendar.getInstance(); calendar.setTime(new Date()) ...
随机推荐
- Linux系统中/dev/mtd与/dev/mtdblock的区别,即MTD字符设备和块设备的区别
转:http://www.crifan.com/linux_system_in__dev__mtd_and__dev__mtdblock_distinction_character_devices_a ...
- Framebuffer重要结构体说明
l fb_var_screeninfo:记录了帧缓冲设备和指定显示模式的可修改记录.包括屏幕的分辨率,像素信息和一些时序变量 struct fb_var_screeninfo { __u32 xre ...
- Java 3D游戏引擎——JME(java Monkey Engine)
转自:http://bbs.gameres.com/forum.php?mod=viewthread&tid=180732 JME(java Monkey Engine),一个非常棒的Java ...
- Android API 中文(14) —— ViewStub
前言 关键字: android.view.ViewStub,版本为Android 2.2 r1 本章翻译来自唐明 ,这里本博负责整理和发布,欢迎其他译者一起参与Android API 的中文翻译行动, ...
- 为运行SQL Server的虚拟机切换装有DB Logs的最佳实践
上一篇说到虚拟机启动不了, 原因是有一块VHDX的文件找不到了. 解决了这个问题之后, 又遇到了另一个问题, 那就是我的这台SQL Server的虚机启动之后, 我的几个重要database变成了su ...
- css3新单位vw、vh、vmin、vmax的使用介绍
1,vw.vh.vmin.vmax 的含义 (1)vw.vh.vmin.vmax 是一种视窗单位,也是相对单位.它相对的不是父节点或者页面的根节点.而是由视窗(Viewport)大小来决定的,单位 1 ...
- 【Linux】linux bash shell之变量替换::=句法、=句法、:-句法、-句法、=?句法、?句法、:+句法、+句法
linux bash shell之变量替换::=句法.=句法.:-句法.-句法.=?句法.?句法.:+句法.+句法 linux bash shell之变量替换::=句法.=句法.:-句法.-句法. ...
- Linq 使用注意
今天在使用Linq的时候,查询很慢.仔细查看在知道,在in的后面跟的是个方法,这个方法返回一个集合. Linq只是语法糖,内部进行了封装.内部的实现也是遍历集合,找到满足条件的元素. 在in的后面使用 ...
- git config 的全局配置
使用git的全局配置 .gitconfig 一:修改 用户下的.gitconfig 修改如图信息,添加你的信息 二: 命令添加 $ git config --global user.name ...
- es5 - array - push
/** * 参数:arr.push(element1, ..., elementN) * 作用:被添加到数组末尾的元素. * 当调用该方法时,新的 length 属性值将被返回. * 描述:push ...