mirror of
https://gitee.com/johng/gf
synced 2026-06-06 16:21:40 +08:00
add gtime.format var 't'
This commit is contained in:
@ -26,6 +26,7 @@ var (
|
||||
'S': "02", // 每月天数后面的英文后缀,2 个字符 st,nd,rd 或者 th。可以和 j 一起用
|
||||
'l': "Monday", // ("L"的小写字母)星期几,完整的文本格式(Sunday 到 Saturday)
|
||||
'z': "", // 年份中的第几天 0到365
|
||||
't': "", // 指定的月份有几天 28到31
|
||||
|
||||
// ================== 月 ==================
|
||||
'F': "January", // 月份,完整的文本格式,例如 January 或者 March January 到 December
|
||||
@ -168,6 +169,8 @@ func (t *Time) Format(format string) string {
|
||||
buffer.WriteString(formatMonthDayMap(result[1:]))
|
||||
case 'z':
|
||||
buffer.WriteString(strconv.Itoa(dayOfYear(t)))
|
||||
case 't':
|
||||
buffer.WriteString(strconv.Itoa(daysInMonth(t)))
|
||||
default:
|
||||
buffer.WriteString(result)
|
||||
}
|
||||
@ -180,6 +183,7 @@ func (t *Time) Format(format string) string {
|
||||
return buffer.String()
|
||||
}
|
||||
|
||||
// 每月天数后面的英文后缀,2 个字符st nd,rd 或者 th
|
||||
func formatMonthDayMap(day string) string {
|
||||
if day > "4" || day == "0" {
|
||||
return monthDayMap["4"]
|
||||
@ -187,14 +191,23 @@ func formatMonthDayMap(day string) string {
|
||||
return monthDayMap[day]
|
||||
}
|
||||
|
||||
// 返回是否是润年
|
||||
func isLeapYear(t *Time) bool {
|
||||
year := t.Year()
|
||||
if (year%4 == 0 && year%100 != 0) || year%400 == 0 {
|
||||
return true
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
// 返回一个时间点在当年中是第几天 0到365 有润年情况
|
||||
func dayOfYear(t *Time) int {
|
||||
year := t.Year()
|
||||
|
||||
month := int(t.Month())
|
||||
day := t.Day()
|
||||
|
||||
// 判断是否润年
|
||||
if (year%4 == 0 && year%100 != 0) || year%400 == 0 {
|
||||
if isLeapYear(t) {
|
||||
if month > 2 {
|
||||
return dayOfMonth[month-1] + day
|
||||
}
|
||||
@ -205,6 +218,25 @@ func dayOfYear(t *Time) int {
|
||||
|
||||
}
|
||||
|
||||
// 一个时间点所在的月最长有多条天 28至31
|
||||
func daysInMonth(t *Time) int {
|
||||
|
||||
month := int(t.Month())
|
||||
switch month {
|
||||
case 1, 3, 5, 7, 8, 10, 12:
|
||||
return 31
|
||||
case 4, 6, 9, 11:
|
||||
return 30
|
||||
}
|
||||
|
||||
// 只剩下第二月份,润年29天
|
||||
if isLeapYear(t) {
|
||||
return 29
|
||||
}
|
||||
|
||||
return 28
|
||||
}
|
||||
|
||||
//格式化使用标准库格式
|
||||
func (t *Time) Layout(layout string) string {
|
||||
return t.Time.Format(layout)
|
||||
|
||||
@ -56,11 +56,15 @@ func Test_Format(t *testing.T) {
|
||||
{"k": "2019-03-10", "f": "N", "r": "7"},
|
||||
{"k": "2019-03-01", "f": "S", "r": "st"},
|
||||
{"k": "2019-03-05", "f": "S", "r": "th"},
|
||||
{"k": "2019-01-01", "f": "第z天", "r": "第0天"},
|
||||
{"k": "2019-01-05", "f": "第z天", "r": "第4天"},
|
||||
{"k": "2020-05-05", "f": "第z天", "r": "第125天"},
|
||||
{"k": "2020-12-31", "f": "第z天", "r": "第365天"}, //润年
|
||||
{"k": "2020-02-12", "f": "第z天", "r": "第42天"}, //润年
|
||||
//{"k": "2019-01-01", "f": "第z天", "r": "第0天"},
|
||||
//{"k": "2019-01-05", "f": "第z天", "r": "第4天"},
|
||||
//{"k": "2020-05-05", "f": "第z天", "r": "第125天"},
|
||||
//{"k": "2020-12-31", "f": "第z天", "r": "第365天"}, //润年
|
||||
//{"k": "2020-02-12", "f": "第z天", "r": "第42天"}, //润年
|
||||
{"k": "2019-02-12", "f": "有t天", "r": "有28天"},
|
||||
{"k": "2020-02-12", "f": "20.2有t天", "r": "20.2有29天"},
|
||||
{"k": "2019-03-12", "f": "19.3有t天", "r": "19.3有31天"},
|
||||
{"k": "2019-11-12", "f": "19.11有t天", "r": "19.11有30天"},
|
||||
}
|
||||
|
||||
for _, v := range times {
|
||||
|
||||
Reference in New Issue
Block a user