Go語言-人類可讀的日期格式化 Human-readable date format

Human-readable date formats 人類可讀的日期格式化

(1) 格式化目標:

將時間戳或日期字符串轉成人類友好的時間字符串:比如 “6分鐘前” “7小時前”,“8天前”,“9月前” 。。。

(2) utils/human_time.go

代碼如下:

package utils

import (
	"fmt"
	"time"
)

// 將時間字符串轉成可讀性友好的時間字符串
func Str2HumanTime(datetime string) string {
	localTime, _ := time.ParseInLocation("2006-01-02 15:04:05", datetime, time.Local)
	res := localTime.Unix()

	return HumanTime(res)
}

// 獲取可讀性友好的時間字符串
func HumanTime(timestamp int64) string {
	const minute = 60 // 60 秒
	const hour = 3600 // 3600 秒
	const day = hour * 24
	const week = day * 7
	const month = day * 30
	const year = month * 12
	
	var now = time.Now().Unix() // 獲取當前時間戳
	var diff = now - timestamp  // 給的日期與當前時間戳的差值

	var str string
	if diff > year {
		str = fmt.Sprintf("%.0f 年前", float64(diff / year))
	} else if diff > month {
		str = fmt.Sprintf("%.0f 月前", float64(diff / month))
	} else if diff > week {
		str = fmt.Sprintf("%.0f 周前", float64(diff / week))
	} else if diff > day {
		str = fmt.Sprintf("%.0f 天前", float64(diff / day))
	} else if diff > hour {
		str = fmt.Sprintf("%.0f 小時前", float64(diff / hour))
	} else if diff > minute {
		str = fmt.Sprintf("%.0f 分鐘前", float64(diff / minute))
	} else if diff > 1000 {
		str = fmt.Sprintf("%.0f 秒前", float64(diff / 1000))
	} else {
		str = "剛剛"
	}

	return result
}

(3) 測試一下

utils/human_time_test.go

package utils

import (
	"testing"
	"time"
)

// go test -v utils/human_time_test.go utils/human_time.go

func TestHumanTime(t *testing.T) {
	t.Log("---> TestHumanTime")
	// var timestamp int64 = 1625882650
	timestamp := time.Now().Unix() - 3600*24*66
	str := HumanTime(timestamp)
	t.Log("---> TestHumanTime", str)
}

func TestStr2HumanTime(t *testing.T) {
	t.Log("---> TestStr2HumanTime")

	data := "2021-02-06 06:25:56"

	str := Str2HumanTime(data)

	t.Log("---> TestStr2HumanTime", str)
}

(4) 執行測試文件:

$ go test -v utils/human_time_test.go utils/human_time.go
=== RUN   TestHumanTime
    human_time_test.go:11: ---> TestHumanTime
    human_time_test.go:15: ---> TestHumanTime 2 月前
--- PASS: TestHumanTime (0.00s)
=== RUN   TestStr2HumanTime
    human_time_test.go:19: ---> TestStr2HumanTime
    human_time_test.go:25: ---> TestStr2HumanTime 6 月前
--- PASS: TestStr2HumanTime (0.00s)
PASS
ok      command-line-arguments  0.105s
➜  go-gin-api git:(master) ✗ 

(5) 參考資料:

綜合網絡

END

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章