php时间戳,日期时间转换及使用大全

php开发过程中,经常会用到一些针对日期、时间、时间戳的转换获取等操作,如下个月第一天啊,上周啊,每个月第三天啊;形式多样,层出不穷。然而,具体到应用时,总想不起具体使用方式,查询网上总没有一个非常全面的整理。不论是博客上还是官网上,都不全面,有的只是文字说明,有的只是简单实例,都不具有实战性。
基于此,整理本文;本文几乎全部是实例;看着非常方便。

1,各种类型时间戳转换

//时间戳加减时间段,day,week,month,year是否带s都可以,与前面的数字是否有空格也都可以。
//因此,这个strtotime对格式要求不严格
$tt=strtotime("+3 days",$time);//$time 3天之后的时间戳
$tt=strtotime("+6 month",$time);//$time6个月之后的时间戳
$tt=strtotime("+1 year 6 months",$time);//指定时间戳1年6个月后的时间戳

$t=time();//当前时间:1545184219,2018-12-19上午9点50
echo strtotime(date('Y-m-01', $t));//结果是:1543593600(2018/12/1 0:0:0)
echo strtotime(date('Y-m-10', $t));//结果是:1544371200(2018/12/10 0:0:0)
echo strtotime(date('Y-m-d 8:0:0', $t));//结果是:1545177600(2018/12/19 8:0:0)
echo strtotime(date("Y-m-d",time()).' 23:59:59');//当天23:59:59的INT类型时间戳
echo strtotime(date("Y-m-t", $tt1).' 23:59:59');//根据某一时间戳获取当月最后的时间戳

//月和日按个位数不补0情况
echo date('Y年n月j日', strtotime(date('2018-08-06')));//结果是:2018年8月6日

$t0 = strtotime(date('Y-m-01', strtotime('-1 month', $t)));//上月起点
$t1 = strtotime(date('Y-m-01'));//本月起点
$t2 = strtotime(date('Y-m-t 23:59:59'));//本月终点

$t0 = strtotime("monday this week");//获取本周周一时间戳
$t0 = strtotime("monday last week");//获取上周周一时间戳

//关于生日判断
$shengri='1986-01-06';
$date=date("m-d",strtotime($shengri));//结果是:01-06
$t_date=strtotime(date('Y-'.$date.'8:0:0', time()));//结果是:1546732800(2019/1/6 8:0:0)

2,根据时间戳获取星期几方法

$week_array = array("日", "一", "二", "三", "四", "五", "六");
$week = date("w", time());
echo "今天是星期".$week_array[$week];

3,关于strtotime()出现的一些奇怪的问题

date("Y-m-d",strtotime("-1 month"))//如果当前是2018-07-31,则输出2018-07-01
var_dump(date("Y-m-d", strtotime("2017-06-31")));//输出2017-07-01

虽然这个问题看起来很迷惑, 但从内部逻辑上来说呢, 其实是"没问题"的,因为这样:
我们来模拟下date内部的对于这种事情的处理逻辑:
1. 先做-1 month, 那么当前是07-31, 减去一以后就是06-31.
2. 再做日期规范化, 因为6月没有31号, 所以就好像2点60等于3点一样, 6月31就等于了7月1

也就是说, 只要涉及到大小月的最后一天, 都可能会有这个迷惑, 我们也可以很轻松的验证类似的其他月份, 印证这个结论:

var_dump(date("Y-m-d", strtotime("-1 month", strtotime("2017-03-31"))));
//输出2017-03-03
var_dump(date("Y-m-d", strtotime("+1 month", strtotime("2017-08-31"))));
//输出2017-10-01
var_dump(date("Y-m-d", strtotime("next month", strtotime("2017-01-31"))));
//输出2017-03-03
var_dump(date("Y-m-d", strtotime("last month", strtotime("2017-03-31"))));
//输出2017-03-03

那怎么办呢?
从PHP5.3开始呢, date新增了一系列修正短语, 来明确这个问题, 那就是"first day of" 和 "last day of", 也就是你可以限定好不要让date自动"规范化":

var_dump(date("Y-m-d", strtotime("last day of -1 month", strtotime("2017-03-31"))));
//输出2017-02-28
var_dump(date("Y-m-d", strtotime("first day of +1 month", strtotime("2017-08-31"))));
//输出2017-09-01
var_dump(date("Y-m-d", strtotime("first day of next month", strtotime("2017-01-31"))));
//输出2017-02-01
var_dump(date("Y-m-d", strtotime("last day of last month", strtotime("2017-03-31"))));
//输出2017-02-28

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

喜爱cpp

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值