溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

php中怎么使用strtotime

發(fā)布時(shí)間:2022-09-22 09:43:51 來(lái)源:億速云 閱讀:124 作者:iii 欄目:開(kāi)發(fā)技術(shù)

本篇內(nèi)容主要講解“php中怎么使用strtotime”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來(lái)帶大家學(xué)習(xí)“php中怎么使用strtotime”吧!

引言

經(jīng)常會(huì)有人被 strtotime 結(jié)合 - 1 month, +1 month, next month 的時(shí)候搞得很困惑,然后就會(huì)覺(jué)得這個(gè)函數(shù)有點(diǎn)不那么靠譜,動(dòng)不動(dòng)就出問(wèn)題。用的時(shí)候就會(huì)很慌…

這不,剛剛就有人在微博上又問(wèn)我:

date("Y-m-d",strtotime("-1 month"))

今天是 2018-07-31 執(zhí)行代碼,怎么輸出是 2018-07-01?

好的吧,雖然這個(gè)問(wèn)題看起來(lái)很迷惑,但從內(nèi)部邏輯上來(lái)說(shuō)呢,其實(shí)是” 對(duì)” 的,你先別著急哈,讓我慢慢講:

我們來(lái)模擬下 date 內(nèi)部的對(duì)于這種事情的處理邏輯:

先做 - 1 month, 那么當(dāng)前是 07-31, 減去一以后就是 06-31.
再做日期規(guī)范化,因?yàn)?6 月沒(méi)有 31 號(hào),所以就好像 2 點(diǎn) 60 等于 3 點(diǎn)一樣,6 月 31 就等于了 7 月 1
是不是邏輯很” 清晰” 呢?我們也可以手動(dòng)驗(yàn)證第二個(gè)步驟,比如:

var_dump(date("Y-m-d", strtotime("2017-06-31")));
//輸出2017-07-01

也就是說(shuō),只要涉及到大小月的最后一天,都可能會(huì)有這個(gè)迷惑,我們也可以很輕松的驗(yàn)證類(lèi)似的其他月份,印證這個(gè)結(jié)論:

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 開(kāi)始呢,date 新增了一系列修正短語(yǔ),來(lái)明確這個(gè)問(wèn)題,那就是”first day of” 和 “l(fā)ast day of”, 也就是你可以限定好不要讓 date 自動(dòng)” 規(guī)范化”:

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

那如果是 5.3 之前的版本 (還有人用么?), 你可以使用 mktime 之類(lèi)的,把所有的日子忽略掉,比如都限定為每月 1 號(hào)就可以了,只不過(guò)就不如直接用 first day 來(lái)的更加優(yōu)雅.

到此,相信大家對(duì)“php中怎么使用strtotime”有了更深的了解,不妨來(lái)實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI