不知道為什麼客戶都喜歡訂單編號的格式使用「年月日+本日訂單數量流水號」,也許是因為好找訂單吧
但為了防止意外我都習慣在「年月日+本日訂單數量流水號」 後面在加個隨機碼,避免發生重複訂單號的機率
不過,客戶們似乎都不喜歡==
進入正題
為了取得當日的訂單數量我通常採用
//取的目前時間的timestamp
$now = getNowTime();
//當天 00:00:00 的 timestamp
$start_time = strtotime(gmdate("Y-m-d 00:00:00",$now));
//當天 23:59:59 的 timestamp
$end_time = strtotime(gmdate("Y-m-d 23:59:59",$now));
這樣看起來代碼上沒問題,但執行起來得到的 timestamp 卻跟實際的 timestamp 有所出入
經過我的測試後發現到原因出現在 strtotime 轉換錯誤,遇到的狀況大約長這樣
strtotime("2017-03-30 23:59:59");
理論上應該得到這個值 1490918399 但卻獲得 1490914799 整整差了一個小時
起初想說既然固定差一個小時,那就自己再補上3600就好了,的確問題真的解決了。
但是事情沒那麼簡單,因為最近卻又發現在抓取訂單號時,竟然又出現訂單數量計算錯誤導致取號重複的問題
再次進行測試後,發現到誤差值從原本的 3600 變成 7200 ,只好上網爬文看看是否有一勞永逸的解決辦法
最終讓我找到可以透過這個設定
date_default_timezone_set('UTC');
strtotime 轉換出來的timestamp 就會正常了,不需要再自行加3600或7200之類的...
還有一點,那就是我開發是用MVC架構但我將 date_default_timezone_set('UTC'); 添加在index.php
不曉得為何沒全局有效(也可能是個案),保險起見還是加完後測試一下或乾脆在使用strtotime的上方添加date_default_timezone_set('UTC');
例如:
date_default_timezone_set('UTC');
echo strtotime("2017-03-30 23:59:59");
文章轉載或引用,請先告知並保留原文出處與連結!!(單純分享或非營利的只需保留原文出處,不用告知)
原文連結:
https://blog.aidec.tw/post/strtotime-timestamp-error
若有業務合作需求,可寫信至: opweb666@gmail.com
創業、網站經營相關內容未來將發布在 小易創業筆記