[PHP] 處理時間格式「多久以前」的程式碼片段

本篇文章更新時間:2019/02/16
如有資訊過時或語誤之處,歡迎使用 Contact 功能通知。
一介資男的 LINE 社群開站囉!歡迎入群聊聊~
如果本站內容對你有幫助,歡迎使用 BFX Pay 加密貨幣新台幣 贊助支持。


「資料友善」其實也分前後端,以日期這個常見的資料來說,後端要處理的時候個人最喜歡得到的格式是 Timestamp ,一串從1970年1月1日0時0分0秒起至現在的總秒數(參考),用這串整數可以簡單地做到排序與轉換轉換各時區所代表的時間(對,網路是連結世界的,時區問題必須要顧慮)。

那,前端? 相信看這串數字 1504700889 你也不知道他是代表 2017年9月9日星期六 13:53:45(台灣時間) 吧? (也請不要以為工程師程式寫久了,這也可以看到就做反應啊)

前端這邊,就算使用者看到上面那串解讀出來的時間格式又覺得可以在短時間意會過來有什麼意義嗎? 其實還是難以第一時間就反應出意義的對吧?

因為閱讀時大腦還要先「看懂這日期時間」然後反思這段時間「對現在」的意義,這兩個步驟如何在縮短成一個步驟?

鋪了如此長的前言就是要說這個功能,「你不要多想,就接受我要給你的資訊吧」

Facebook 就是這樣處理使用者發文時間的。「XXX N分鐘前」,這樣直接看到就聯想到 XXX 是多久前發文的,時間點很近的話看到還有即時互動的感覺。

PHP 程式碼片段如下:

function timeago($timestamp) {
    $strTime = array("秒", "分鐘", "小時", "天", "月", "年");
    $length = array("60", "60", "24", "30", "12", "10");
    $currentTime = time();
    if ($currentTime >= $timestamp) {
        $diff = time() - $timestamp;
        for ($i = 0; $diff >= $length[$i] && $i < count($length) - 1; $i++) {
            $diff = $diff / $length[$i];
        }
        $diff = round($diff);
        return $diff . " " . $strTime[$i] . "前";
    }
}

是目前看到比較彈性而且漂亮的寫法,原版來源是 PHP Time Ago Function 這篇,我僅做翻譯而已。

其實在沒有要求精準時間資訊的情況下,這個方法好像都滿通用的。

補:感謝 Audi 大大補充,如果是用 WordPress 的話,有內建方法「human_time_diff」可以產生這樣的格式!看名稱還真的如上所說,就是給人看的XD

- Powered by Mxp.TW -FB2WP-


Share:

作者: Chun

資訊愛好人士。主張「人人都該為了偷懶而進步」。期許自己成為斜槓到變進度條 100% 的年輕人。[///////////____36%_________]

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *


文章
Filter
Apply Filters
Mastodon