使用time包獲取指定數(shù)量年、季度、月、周邊界

1.定義返回?cái)?shù)據(jù)結(jié)構(gòu)體:
type formatBorder struct {
     Start string  `json:"start"`
     End   string  `json:"end"`
     Name  string  `json:"name"`
}
2.獲取年邊界:
func yearDemo(num int) ([]formatBorder) {
     res := make([]formatBorder,num)
     now := time.Now()
     for i :=0 ; i < num ; i++{
         year := now.AddDate(-i,0,0).Year()
         res[num-i-1] = formatBorder{fmt.Sprintf("%v-01-01",year), fmt.Sprintf("%v-12-31",year), fmt.Sprintf("%v年",year)}
     }
     return res
}
3.獲取季度邊界:
func quarterDemo(num int) ([]formatBorder) {
     res := make([]formatBorder,num)
     now := time.Now()
     for i :=0 ; i < num ; i++{
         local := now.AddDate(0,-3*i,0)
         start , end , name  , year:= "" , "" ,"" , local.Year()
         switch int(local.Month()) {
         case 1,2,3:
             start = fmt.Sprintf("%v-01-01",year)
             end   = fmt.Sprintf("%v-03-31",year)
             name  = fmt.Sprintf("%v-Q1",year)
         case 4,5,6:
             start = fmt.Sprintf("%v-04-01",year)
             end   = fmt.Sprintf("%v-06-30",year)
             name  = fmt.Sprintf("%v-Q2",year)
         case 7,8,9:
             start = fmt.Sprintf("%v-07-01",year)
             end   = fmt.Sprintf("%v-09-30",year)
             name  = fmt.Sprintf("%v-Q3",year)
         default:
             start = fmt.Sprintf("%v-10-01",year)
             end   = fmt.Sprintf("%v-12-31",year)
             name  = fmt.Sprintf("%v-Q4",year)
         }
         res[num-i-1] = formatBorder{start,end,name}
     }
     return res
}

4.獲取月邊界:
func monthDemo(num int) ([]formatBorder){
     res := make([]formatBorder,num)
     dateStart ,_:= time.Parse("2006-01-02",fmt.Sprintf("%v-01",time.Now().Format("2006-01")))
     for i := 0 ; i < num ; i++ {
         start := dateStart.AddDate(0,-i,0).Format("2006-01-02")
         end   := dateStart.AddDate(0,-(i-1),-1).Format("2006-01-02")
         name  := fmt.Sprintf("%v年%v月",start[0:4],start[5:7])
         res[num-i-1] = formatBorder{start,end,name}
     }
     return res
}
5.0 周邊界:
func weekendBase(t time.Time) formatBorder{
    start , end := "" , ""
    switch int(t.Weekday()) {
    case 0:
        start = t.AddDate(0,0,-6).Format("2006-01-02")
        end   = t.Format("2006-01-02")
    default:
        start = t.AddDate(0,0,-int(t.Weekday())+1).Format("2006-01-02")
        end   = t.AddDate(0,0,7-int(t.Weekday())).Format("2006-01-02")
    }
    return formatBorder{start,end,"周邊界"}
}
5.1 本周邊界:
func thisWeekendBorder() formatBorder{
     return weekendBase(time.Now())
}
5.2 上周邊界:
func preWeekendBorder() formatBorder{
     return weekendBase(time.Now().AddDate(0,0,-7))
}
5.3 下周邊界:
func nextWeekendBorder() formatBorder{
     return weekendBase(time.Now().AddDate(0,0,7))
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容