iT邦幫忙

1

怎麼精準抓到三天前的時間戳?

今天為 10/19

echo strtotime(date('Y-m-d', time()));

output 1539921600
是 2018/10/19 12:0:0

三天前為 10/16

echo strtotime(date('Y-m-d', strtotime('-3 days')));

output 1539662400
是 2018/10/16 12:0:0
似乎都多了十二個小時 (43200)
我想抓到的是

今天 2018/10/19 0:0:0 就是 18號過了23:59:59後的這個時間點
以及
三天前 2018/10/16 0:0:0 就是 15號過了23:59:59後的這個時間點
怎麼取好像都怪怪的不對

我以為減去 43200 就行了

echo strtotime(date('Y-m-d 0:0:0', time()-43200));

但是變成了 1539835200 也就是 2018/10/18 12:0:0
加也不對,變成了 1539921600 也就是 2018/10/19 12:0:0

這怎麼抓才會是(當天的)2018/10/19 0:0:0 跟(當天的三天前的) 2018/10/16 0:0:0?

參考資源
http://tool.chinaz.com/Tools/unixtime.aspx

看更多先前的討論...收起先前的討論...
rockfire iT邦新手 5 級 ‧ 2018-10-19 18:14:58 檢舉
我是很好奇 抓三天前為什麼是減43200 ,不是 86400 * 3

再補充一下好了,
https://ithelp.ithome.com.tw/articles/10195149
asys0512 iT邦研究生 5 級 ‧ 2018-10-20 01:39:35 檢舉
因為他每次印給我的都是 12:0:0 ,多了十二個小時。
rockfire iT邦新手 5 級 ‧ 2018-10-20 11:42:42 檢舉
時區問題吧~~我上面貼的網址有講,再不行就要改php.ini
wwx iT邦研究生 1 級 ‧ 2018-10-20 13:48:14 檢舉
time()是處理當下的utc時間
先同餘86400
再加減固定的時區秒數差值
就可以獲得所要的的
日期 yyyy/mm/dd 和時間為當日的 00:00:00
Zaku iT邦新手 4 級 ‧ 2018-10-21 00:54:35 檢舉
時間要看你所在的時區,你可以改系統的時區,但你在不同時區抓到時間會不一樣,可能會變成跟你想像的準確時間有點誤解
asys0512 iT邦研究生 5 級 ‧ 2018-10-21 12:58:01 檢舉
我設定的時區是 亞洲台北
浩瀚星空 iT邦研究生 4 級 ‧ 2018-10-23 10:55:34 檢舉
我也是覺得你有時區的問題存在。
光time出來的時間就已經不對了。

你可以用date("Z")先查查你現在的時區吧。如果你在+8時區的話,你會獲得28800這個數。不是的話就是你的時區錯了。

1 個回答

1
bigsmile
iT邦新手 4 級 ‧ 2018-10-19 18:39:05
最佳解答
//現在時間
$now = new DateTime();

//三天前時間
$three_days_ago = (clone $now)->modify('-3 days'); 

echo $now->format('Y-m-d H:m:s');  //輸出:2018-10-19 18:10:19

echo $three_days_ago->format('Y-m-d H:m:s');  //輸出:2018-10-16 18:10:19

我要發表回答

立即登入回答