3分鐘短文|PHP 求2個日期相差天數,兼容性好錯誤率低,收藏了

2020-12-24 程式設計師小助手

引言

在實際業務邏輯中,對時間戳,日期對象,日期字符串的處理,我們經常需要用到時間比較,還需要用到求日期差。比如對一場活動的倒計時,優惠券的過期時間等等。

今天我們介紹一下如何計算兩個日期之間的差值?

因為日期可以是字符串,對象,數值,格式各不相同,有的精確到日,有的精確到小時,有的精確到毫秒。如何在處理中做到容錯率要高呢。

學習時間

先說最笨的辦法。不藉助任何對象,我們僅使用內置的函數加減乘除和格式轉換。像下面這樣寫。(這個方法對於實施了夏令時的地區,會出現錯誤。)

$now = time(); $your_date = strtotime("2020-01-31"); $datediff = $now - $your_date; echo round($datediff / (60 * 60 * 24));

上面的方法是使用時間戳,把整數值做減法,最後除以一天的秒數,四捨五入取整,就是相差的天數。

這樣寫當然是沒有問題的。但是,如果在框架內使用,我們更提倡使用對象的操作方式對時間進行運算。

下面是 PHP 提供的內置的 DateTime 對象用於操作。

$earlier = new DateTime("2019-07-06"); $later = new DateTime("2020-07-01"); $diff = $later->diff($earlier)->format("%a");

DateTime 日期時間對象是 PHP 5.3 以上才提供的。上述代碼在求差值運算上,調用了 DateTime 的 diff 方法,並鏈式調用 format 格式化輸出。

更簡單友好:Carbon

如果你覺得使用 DataTime 對象實在是不好用,有沒有更友好的,更簡單,調用更簡單的類呢?有的,它就是Carbon庫。該庫封裝了非常多非常多日期時間操作解析的方法,足以應對各種各樣變態的需求。

計算日期天數差,簡直是小菜一碟,

$dt = Carbon::parse('2020-01-01'); echo $dt->diffInDays(Carbon::now());

第一行,把日期字符串解析成 Carbon 對象。然後對其進行求天數差的方法 diffInDays。結果就是天數。

那如果要求相差的小時數呢,diffInHours,diffInSeconds,是不是簡單好記?猜都能猜的到用途。

寫在最後

我們強烈建議,使用 DateTime 或者 Carbon 庫執行日期時間的操作,效率很高,操作方便,而且容錯率很高。

Happy coding :_)

我是 @程式設計師小助手 ,持續分享編程知識,歡迎關注。

相關焦點

  • 推廣必備8個Excel經典函數,get進階大神
    函數公式: =IF(測試條件,真值,[假值]) 函數解釋: 當第1個參數「測試條件」成立時,返回第2個參數,不成立時返回第3個參數。
  • php基礎訓練,3分鐘課堂
    接上一節,php基礎試題訓練,祝你快速掌握php內容! 錯誤 正確解析:php是一種區分大小寫的腳本語言!2、下面哪種類型的變量是浮點數,比如 3.14159 或 49.1? integer double boolean string解析:在php中,各種數據類型分別用——integer – 整型,double – 浮點型,boolean – 布爾型,string – 字符串來表示。
  • 6位顯示數字 php - CSDN
    echo date(『Y-M-j『);2007-Feb-6echo date(『Y-m-d『);2007-02-06大寫M表示月份的3個縮寫字符,而小寫m則表示月份的數字(帶前導0);沒有大寫的J,只有小寫j表示月份的日期,無前導o;若需要月份帶前導則使用小寫d。
  • 腦機接口新研究:超準「腦活動翻譯器」,錯誤率不到3%
    智東西3月31日消息,腦機接口研究又有新進展!美國加州大學舊金山分校研究人員研發了一種新型機器翻譯算法,能以較高準確率解碼腦神經活動,並將其翻譯成文字,轉錄錯誤率低至3%,可媲美專業的語音轉錄算法。然而多年過去,腦機接口在解碼神經活動方面普遍存在速度慢和準確率低的問題。據論文介紹,此前的解碼模型錯誤率高至約60%。1、語言表達過程複雜,難以切入語言表達本身是一個複雜的過程:首先,大腦要確定想要表達的意思,並在表達的過程中對語義進行不斷修正。然後,大腦要選擇與語義相匹配的詞彙。
  • excel函數公式應用:時間日期提取公式匯總,你用過哪些?
    編按:哈嘍,大家好!如何快速在一組時間數據中分別提取出年月日、時分秒數據?如何快速計算某日期是年內第幾周、星期幾,以及日期之間間隔的天數、月數、年數、小時數、分鐘數?如何快速補全指定月份日期,合併日期和時間?今天老菜鳥針對上述在日常工作中經常會遇到的問題,總結了20個常用的關於日期和時間的公式,趕緊來看看吧!
  • 行測常見的日期問題考法
    怎麼根據題幹信息分析得出所求的是星期幾,我們就需要知道日期的相關常識。  一、日期的相關常識  1、閏年366天,平年365天。  2、閏年、平年的判定:  (1)不是整百的年份:能被4整除的是閏年,否則為平年(例如2020年是閏年)。
  • 科學家研發出「讀心術」,直接將腦電波翻譯成文本,錯誤率低至 3%
    ,錯誤率僅為 3% 。雖然準確性因人而異,但對於其中一位志願者來說,平均每個句子只有 3% 需要糾正,高於速記員 5% 的單詞錯誤率。 當然,目前這個系統還是有很大局限,算法還只能處理少量的句子。系統也不能用於嚴重殘疾失去語言能力的患者,因為它依賴於記錄大聲說出句子的人的大腦活動。然而,每個志願者只用了不到 40 分鐘來訓練,在有限的小數據集情況下,達到了迄今為止最大的精確度。
  • 最常用日期函數匯總excel函數大全收藏篇
    輸入公式: =DATE(A2,B2,C2) 2、DATEVALUE 函數DATEVALUE:將存儲為文本的日期轉換為Excel識別為日期的序列號。
  • 高中英語滿分必備3500個詞彙分類整理,附40篇英語短文配套訓練
    英語差與英語好同學的差距,90%的原因在詞彙量上。今天我就為大家分享高中英語滿分必備的3500個核心詞彙的分類整理,讓你更加容易記憶。並且附贈40篇英文短文搭配訓練。讓你能夠在一輪複習進行一半的這個時候穩定根基。
  • 每天三分鐘:PHP打通關檢驗
    php常見函數列表1. 下列哪個函數用於按降序排列數組 ? asort() sort() dsort() rsort()解析:rsort() 函數對數值數組進行降序排序,sort()默認就是升序排列。2. php中哪個內置函數會在數組末尾添加值 ? into_array() array_unshift() array_push() inend_array()解析:array_push() 函數向第一個參數的數組尾部添加一個或多個元素(入棧),然後返回新數組的長度。3. php可以使用哪個函數將指針移動到前面的數組位置 ?
  • ROCBOSS v2.1.0 正式發布,PHP 微社區
    ROCBOSS v2.1.0 正式發布,現已提供下載:http://git.oschina.net/rocboss/ROCBOSS/repository/archive?
  • 清華教授:40篇短文囊括3500個單詞,貼牆背,1月記牢3年核心詞!
    清華教授:40篇短文囊括3500個單詞,貼牆背,1月記牢3年核心詞!眾所周知,我們英語的學習是離不開我們英語單詞的一個積累的,只有我們將單詞掌握好,有了基礎,那麼,我們才能去學好英語這門學科,尤其是上了高年級以後,我們單詞的一個記憶,就變得尤為重要了,這也是為什麼,我們在學習英語每一章節的時候,老師也都會要求孩子將單詞學會。
  • 世界上最好的語言PHP:OpenCV與計算機視覺已在我掌控之下
    在一張有 4 張臉的照片中,網絡尋找到 200 個候選對象。其中每一個對象的形式為 [,, $confidence, $startX, $startY, $endX, $endY]。元素 $confidence 代表「置信度」,即預測概率有多好,比如 0.75 是好的。之後的元素代表人臉矩形框的坐標。
  • Excel格式表格中日期、時間之差怎麼計算
    在Excel表格中,日期、時間都可以計算的,利用好了,可以省去大量的工作,今天小編分享在Excel中利用函數計算日期、時間差。情況一:日期計算,利用DATEDIF()函數1、計算兩個日期相差幾年,在E4單元格輸入公式:=DATEDIF(B4,C4,"y");2、計算兩個日期相差幾個月,在E54單元格輸入公式:=DATEDIF(B4,C4,"m");
  • 蘋果手機如何在屏幕顯示戀愛天數?
    2、打開「倒數日」App,點擊右上角的「+」來進行添加日期。3、設置戀愛紀念日的具體日期,並在「倒數本」選項中選擇「紀念日」,點擊保存。4、回到桌面主頁,長按空白區域進行添加小組件。5、找到「倒數日」小組件,點擊查看詳情。
  • 兄弟P900煙臺專賣店熱銷 降低錯誤率
    兄弟P900快速、高效地進行資產的管理;大大降低之前人工管理的低效、以及錯誤率。從資產源頭到最終盤點,由兄弟幫您輕鬆掌控。剪切自動(全切約4.5萬次/半切約3萬次)色帶TZe色帶:3.5mm/6mm/9mm/12mm/18mm/24mm/36mmHGe色帶:9mm/12mm/18mm/24mm/36mmFLe標籤:21mm×45mm
  • Excel中常用日期函數的用法:14個公式滿足工齡、年齡、帳齡計算
    WEEKDAY()函數返回一周中的第幾天,是1-7的數值  參數1:日期或數字型日期  參數2:從星期日=1到星期六=1時用1;從星期一=1到星期日=7時用2。我們工作的習慣一般用2    8、獲取當前日期之後一個月的日期  公式:=EDATE
  • 如何修改PHP的memory_limit限制
    如果你上面的方法建立了php文件來查看其配置參數,則你可以找到「Loaded Configuration File」這一項,以下是個例子:對於Linux用戶,你可以通過執行「php -i | grep Loaded Configuration File」來找到對應的配置文件。而Windows用戶,你可以嘗試修改你的php安裝目錄下的php.ini。
  • 3分鐘短文|PHP 數值格式化,前導0還能這麼加!
    $s = sprintf('%02d', $digit);其中格式化 02 表示左側至少是2位整數,多出的部分不管,不夠的補零。既然都是字符串格式化,我們藉助 PHP 提供的字符串補全函數 str_pad,也可以達到相同的效果。
  • PHP7 版本各大類型特性
    $ints){ return array_sum($ints);}var_dump(sumOfInts(2, '3', 4.1));php5.6不支持的。強制類型支持如下類型Class/interface name 該參數必須是instanceof給定的類或接口名稱。 PHP 5.0.0self 參數必須instanceof與定義方法的類別相同。