php開發過程中,經常會用到一些針對日期、時間、時間戳的轉換獲取等操作,如下個月第一天啊,上週啊,每個月第三天啊;形式多樣,層出不窮。然而,具體到應用時,總想不起具體使用方式,查詢網上總沒有乙個非常全面的整理。不論是部落格上還是官網上,都不全面,有的只是文字說明,有的只是簡單例項,都不具有實戰性。
基於此,整理本文;本文幾乎全部是例項;看著非常方便。
//時間戳加減時間段,day,week,month,year是否帶s都可以,與前面的數字是否有空格也都可以。
//因此,這個strtotime對格式要求不嚴格
$tt=strtotime("+3 days",$time);//$time 3天之後的時間戳
$tt=strtotime("+6 month",$time);//$time6個月之後的時間戳
$tt=strtotime("+1 year 6 months",$time);//指定時間戳1年6個月後的時間戳
echo strtotime(date('y-m-01', $t));//結果是:1543593600(2018/12/1 0:0:0)
echo strtotime(date('y-m-10', $t));//結果是:1544371200(2018/12/10 0:0:0)
echo strtotime(date('y-m-d 8:0:0', $t));//結果是:1545177600(2018/12/19 8:0:0)
echo strtotime(date("y-m-d",time()).' 23:59:59');//當天23:59:59的int型別時間戳
echo strtotime(date("y-m-t", $tt1).' 23:59:59');//根據某一時間戳獲取當月最後的時間戳
$t0 = strtotime(date('y-m-01', strtotime('-1 month', $t)));//上月起點
$t1 = strtotime(date('y-m-01'));//本月起點
$t2 = strtotime(date('y-m-t 23:59:59'));//本月終點
//關於生日判斷
$shengri='1986-01-06';
$date=date("m-d",strtotime($shengri));//結果是:01-06
$t_date=strtotime(date('y-'.$date.'8:0:0', time()));//結果是:1546732800(2019/1/6 8:0:0)
關於strtotime()出現的一些奇怪的問題
date("y-m-d",strtotime("-1 month"))//如果當前是2018-07-31,則輸出2018-07-01
var_dump(date("y-m-d", strtotime("2017-06-31")));//輸出2017-07-01
雖然這個問題看起來很迷惑, 但從內部邏輯上來說呢, 其實是"沒問題"的,因為這樣:
我們來模擬下date內部的對於這種事情的處理邏輯:
1. 先做-1 month, 那麼當前是07-31, 減去一以後就是06-31.
2. 再做日期規範化, 因為6月沒有31號, 所以就好像2點60等於3點一樣, 6月31就等於了7月1
也就是說, 只要涉及到大小月的最後一天, 都可能會有這個迷惑, 我們也可以很輕鬆的驗證類似的其他月份, 印證這個結論:
var_dump(date("y-m-d", strtotime("-1 month", strtotime("2017-03-31"))));
//輸出2017-03-03
var_dump(date("y-m-d", strtotime("+1 month", strtotime("2017-08-31"))));
//輸出2017-10-01
var_dump(date("y-m-d", strtotime("next month", strtotime("2017-01-31"))));
//輸出2017-03-03
var_dump(date("y-m-d", strtotime("last month", strtotime("2017-03-31"))));
//輸出2017-03-03
那怎麼辦呢?
從php5.3開始呢, date新增了一系列修正短語, 來明確這個問題, 那就是"first day of" 和 "last day of", 也就是你可以限定好不要讓date自動"規範化":
var_dump(date("y-m-d", strtotime("last day of -1 month", strtotime("2017-03-31"))));
//輸出2017-02-28
var_dump(date("y-m-d", strtotime("first day of +1 month", strtotime("2017-08-31"))));
//輸出2017-09-01
var_dump(date("y-m-d", strtotime("first day of next month", strtotime("2017-01-31"))));
//輸出2017-02-01
var_dump(date("y-m-d", strtotime("last day of last month", strtotime("2017-03-31"))));
//輸出2017-02-28
時間戳轉換日期 日期轉換時間戳 時間戳轉換星期
時間戳轉換日期 string date orderinfo.getchangetime replace null dateformat sdf new dateformat mm dd string monthdate sdf.format new date long.parselong date ...
php 時間轉換時間戳 PHP日期格式轉時間戳
php 提供了函式可以方便的將各種形式的日期轉換為時間戳,該類函式主要是 strtotime 將任何英文文字的日期時間描述解析為時間戳。mktime 從日期取得時間戳。strtotime strtotime 函式用於將英文文字字串表示的日期轉換為時間戳,為 date 的反函式,成功返回時間戳,否則返...
PHP時間戳和日期轉換
date format,timestamp format 必需。規定時間戳的格式。timestamp 可選。規定時間戳。預設是當前時間和日期 例如 date y m d h i s 具體時間戳 y 年 四位數 大寫 m 月 兩位數,首位不足補0 小寫 d 日 兩位數,首位不足補0 小寫 h 小時 帶...