日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

php计算时间顺延3分,PHP关于strtotime函数的大坑

發布時間:2024/9/19 php 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 php计算时间顺延3分,PHP关于strtotime函数的大坑 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

2020/04/30 早上上班的時候看到系統里過去半年每個月賬單記錄里,出現了兩次202003,少了202002的記錄,比較奇怪就查了下前端代碼,是從后端php使用strtotime獲取的。

項目中使用了如下的代碼來獲取過去半年的月份,然后通過這六個月份來依次查賬單:

this->month = array(

date('Ym'),

date('Ym',strtotime('last month')),

date('Ym',strtotime('2 months ago')),

date('Ym',strtotime('3 months ago')),

date('Ym',strtotime('4 months ago')),

date('Ym',strtotime('5 months ago')),

date('Ym',strtotime('6 months ago')),

);

比較疑惑為什么會獲取到兩次2020年3月,就測試了下strtotime這個方法的last month;發現這個方法有一個大坑就是他并不會判斷大月小月,更不會判斷閏年平年,而是默認直接給當前的月份數字減一;在大月的最后一天,以及閏年的二月最后一天等特殊日期均會出現類似bug。

對該函數做了一次完整測試,結果如下圖:

strtotime相關測試結果

可以看到3月30日的一個月前2月30日,但2020年2月只有29日所以直接被順延到3月1日,然后再次取回Ym就變成了3月的前一個月還是3月。

查了一下相關資料,php對此給出的解決辦法是在php版本5.3之后date新增了一系列修正的短語來明確這個問題,那就是'the first day of'和‘the last day of’,如圖中的

m4表示的,就能夠正確的把4月30日的兩個月前指向2月29日,然后使用Ym可表示為202002,即可正確獲取到想要的結果。如下圖:

php 5.3之后可用的解決辦法

這樣就能夠解決大小月和平閏年帶來的月份問題了。

總結

以上是生活随笔為你收集整理的php计算时间顺延3分,PHP关于strtotime函数的大坑的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。