写了一个页面向某个api请求一些数据,然后保存为一篇新的文章,文章的标题就是“当天的日期+xx新闻”,程序首先通过date函数获取当前日期,组合成标题后,先查询本地是否有同名文章,再判断api发送过来的数据是否是当天更新的数据,如果数据不是当天的,则不生成文章,如果没有同名,api的数据发布时间也能对上,则从api返回的数据中提取数据发布一篇文章。第一天程序运行的很好,第二天7点50多的时候到岗,发现访问页面后并没有生成文章。
时区问题
第一反应是api的数据可能尚未更新,提取api的数据看了一下,人api老勤快了,早早把数据更新完了。翻看了一遍程序也觉得没有什么明显错误,重新刷新了一下生成文章页,发现这次成功生成了一篇文章,怎么还时灵时不灵呢?看了一下电脑时间,8点过一点,隐约记得我国的时间属于东八区,于是将php的date的默认返回时间用echo输出看了一下,发现确实刚过零点。也就是说7点50多分请求失败的那几次,可能是因为在系统默认时区,日期还是上一天的日期,所以判断的同名文章,也是以昨天发布的文章为参照物。
php修改默认时区
可以通过修改php的配置文件来设置默认时区,只需要在php.ini里加上找到date.timezone项,设置date.timezone = “Asia/Shanghai”,重启php环境就ok了。但考虑到个人使用的是wordpress博客,担心会导致与博客的时间设置相冲突,所以并不想去固定配置,只需要在调用的时候修改,调用完不影响其他程序的正常运行。所以采用了在页面中添加语句的方式:
date_default_timezone_set("PRC");
添加完上述语句后,利用date函数输出的时间与本地时间就一致了,为了确保没有改动设置,又删除了上述语句试了一下,输出时间又回到了8小时之前。
date_default_timezone_set的参数
上面函数中的“PRC”关于PRC,指的是中华人民共和国,因为时区众多,函数也支持众多的参数,数量之多,一锅炖不下,这里简单列举几个:
- Asia/Shanghai – 上海
- Asia/Chongqing – 重庆
- Asia/Urumqi – 乌鲁木齐
- Asia/Hong_Kong – 香港
- Asia/Macao – 澳门
- Asia/Taipei – 台北
- Asia/Singapore – 新加坡
上面修改默认时区的语句,也可以改写为这样:
date_default_timezone_set("Asia/Shanghai");
php日期函数date
php中日期函数date不仅可以输出日期,也支持时间的输出:
echo date("Y-m-d");
//输出结果:2022-04-29
echo date("y-m-d");
//输出结果:22-04-29
echo date("H-i-s");
//输出结果:21-32-45
echo date("h-i-s");
//输出结果:09-32-45
以上语句中的字母都有其特定的涵义,但“-”只是修饰符,我们完全可以写成这样,当然这样除了让人找不着北之外毫无实际意义:
echo date("H**i**s");
//输出结果:21**35**42
echo date("h&&i&&s");
//输出结果:09&&35&&42
php日期函数格式化标识符
标识符 | 涵义 | 返回数据 |
---|---|---|
Y | 年份的四位数表示 | 例:2022 |
y | 年份的两位数表示 | 例:22 |
m | 月份的数字表示 | 从01到12 |
d | 一个月中的第几天 | 从01到31 |
H | 24小时制,带前导零 | 00到23 |
h | 12小时制,带前导零 | 01到12 |
i | 分,带前导零 | 00到59 |
s | 秒,带前导零 | 00到59 |
l(小写L) | 星期几的完整的文本 | 例:friday |
这里仅罗列了几个常用的标识符,完整的列表可以参考菜鸟教程的相关页面:PHP date()函数