PHP的日期函数

在使用PHP的过程中,日期系列函数是出镜率非常高的,今天就谈谈日期函数的常用方式,以及PHP日期函数的那些坑。

Date/Time 函数允许您从 PHP 脚本运行的服务器上获取日期和时间。您可以使用 Date/Time 函数通过不同的方式来格式化日期和时间。

注释:这些函数依赖于服务器的本地设置。

PHP日期函数(基础常用部分):

date_default_timezone_set()     设置默认时区,被所有的 Date/Time 函数使用。例:date_default_timezone_set('PRC');PRC是指中华人民共和国(People's Republic of China);这段代码是把默认时区设置成了中国标准时间。

date_format()      返回一个根据指定格式进行格式化的日期。

例:$date = date_create("2019-03-15");

      echo date_format($date, "Y/m/d H:i:s");//返回一个根据指定格式进行格式化的日期(输入的是时间对象,不能是字符串)。

date()              格式化本地日期和时间。例:echo date("Y-m-d H:i:s"); 输出:2019-10-30 16:14:24

microtime()          返回当前 Unix 时间戳的微秒数。echo microtime(); 输出0.53204500 1572423353(用法在php程序计算消耗时间处已有详解)

strtotime()          将任何字符串的日期时间描述解析为 Unix 时间戳。echo strtotime("2019-10-01"); 输出字符串日期的unix时间戳1569859200

time()              返回当前时间的 Unix 时间戳。echo time(); 输出当前unix时间戳1572423487

 

PHP日期函数(拓展部分):

在一系列的时间函数里面,date()函数和strtotime()函数是最常用,且用法也非常丰富的两个函数

date() 函数用法:date(format,timestamp);

返回将整数 timestamp 按照给定的格式字串而产生的字符串。如果没有给出时间戳则使用本地当前时间。换句话说,timestamp 是可选的,默认值为 time()。

format:必需参数,规定输出日期字符串的格式。可使用下列字符:
d - 一个月中的第几天(从 01 到 31)
j - 一个月中的第几天,不带前导零(1 到 31)
w - 星期几的数字表示(0 表示 Sunday[星期日],6 表示 Saturday[星期六])
m - 月份的数字表示(从 01 到 12)
n - 月份的数字表示,不带前导零(1 到 12)
Y - 年份的四位数表示(例2019)
y - 年份的两位数表示(例19)
g - 12 小时制,不带前导零(1 到 12)
G - 24 小时制,不带前导零(0 到 23)
h - 12 小时制,带前导零(01 到 12)
H - 24 小时制,带前导零(00 到 23)
i - 分,带前导零(00 到 59)
s - 秒,带前导零(00 到 59)

N - 星期几的 ISO-8601 数字格式表示(1-7,表示 Monday[星期一]-Sunday[星期日])
o - ISO-8601 标准下的年份数字(例2019)
l('L' 的小写形式)- 星期几的完整的文本表示(英文展示)
z - 一年中的第几天(从 0 到 365)
F - 月份的完整的文本表示(January[一月份] 到 December[十二月份])
M - 月份的短文本表示(用三个字母表示,一般是英文月份的前三个字母)
t - 给定月份中包含的天数
L - 是否是闰年(如果是闰年则为 1,否则为 0)
u - 微秒(PHP 5.2.2 中新增的)
e - 时区标识符(例如:UTC、GMT、Atlantic/Azores)
O - 格林威治时间(GMT)的差值,单位是小时(实例:+0100)
P - 格林威治时间(GMT)的差值,单位是 hours:minutes(PHP 5.1.3 中新增的)
U - 自 Unix 纪元(January 1 1970 00:00:00 GMT)以来经过的秒数

如果成功则返回格式化的日期字符串,如果失败则报 E_WARNING 错并返回 FALSE。

 

strtotime()将任何字符串的日期时间描述解析为Unix时间戳
// 更多实例(PHP_EOL只是换行符而已)
echo strtotime("now"), PHP_EOL;
echo strtotime("2019-10-30"), PHP_EOL;
echo strtotime("2019/10/30"), PHP_EOL;
echo strtotime("20191030"), PHP_EOL;
echo strtotime("10 October 2019"), PHP_EOL;
echo strtotime("10 Oct 2019"), PHP_EOL;
echo strtotime("+1 day"), PHP_EOL;//当前时间+24*3600得到的时间戳
echo strtotime("-1 day"), PHP_EOL;//当前时间-24*3600得到的时间戳
echo strtotime("yesterday"), PHP_EOL;//昨天0点时间戳
echo strtotime("tomorrow"), PHP_EOL;//明天0点时间戳
echo strtotime("last day"), PHP_EOL;//当前时间-24*3600得到的时间戳
echo strtotime("next day"), PHP_EOL;//当前时间+24*3600得到的时间戳
echo strtotime("+1 week"), PHP_EOL;//(当前时间+7*24*3600得到的时间戳)
echo strtotime("last week"), PHP_EOL;//(上周一0点时间戳)
echo strtotime("+1 week 2 days 4 hours 2 seconds"), PHP_EOL;//(当前时间+7*24*3600+2*24*3600+4*3600+2小时时间戳)
echo strtotime("next Monday"), PHP_EOL;//(下周一0点时间戳)
echo strtotime("last Monday"), PHP_EOL;//(上周一0点时间戳)
echo strtotime("+1 Month", strtotime("2019-10-31")), PHP_EOL;//(12月1号0点时间戳)
echo strtotime("+1 Month", strtotime("2019-11-01")), PHP_EOL;//(12月1号0点时间戳)
echo strtotime("-1 Month", strtotime("2019-10-31")), PHP_EOL;//(10月1号0点时间戳)
echo strtotime("-1 Month", strtotime("2019-02-28")), PHP_EOL;//(1月28号0点时间戳)
echo strtotime("-1 Month", strtotime("2019-03-01")), PHP_EOL;//(02月1号0点时间戳)

 

注意:strtotime()+1,-1month的用法, 是最坑的用法,+1 day是当前时间戳加24*86400,+1 week是当前时间戳加24*86400*7,

但是+1month,-1month,却不是加减30*24*86400,因为随着每个月天数的不同,加减1month的天数也不一样,比如1月31号+1month,是3月3号,而不能得到2月某一天的时间戳,所以,使用加减1month的时候,切记小心使用。

最安全的方式,就是取上个月或者下个月1号0点的时候,先把要转换的时间转换成当月1号,使用这个月的1号再+1month或者-1month,这样一定能取到下个月1号或者上个月1号0点的数据。例如:根据2月任意一天的时间戳,想换取下个月1号时间戳的用法是:echo strtotime("+1 Month", strtotime(date("Y-m-1", time())));

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值