golang 通用函式 獲取開始時間到現在是第幾周

2021-10-01 03:33:03 字數 2784 閱讀 5755

工作中遇到的乙個問題,需要獲取從乙個開始時間到當前時間是第幾周,網上沒有找到這個通用函式。

所以想著寫出來後拿出來,方便自己,方便他人。

注意:開始時間和結束時間必須是零時!即

"2019-11-04 00:00:00"
**:

package main

import (

"fmt"

"time"

)func main()

endtime,endtimeerr:=time.parse("2006-01-02 15:04:05",endtimestr)

if endtimeerr==nil

sequence=getweeksequence(starttime,endtime,time.now())

println("第",sequence,"周")

}//獲取當前時間在時間段內的第幾周

//思路:首先用根據第一周的結束時間,判斷時間段一共多少周。

// 一周,兩周直接累加。三周以上將時間段分成所有三段,第一周,中間所有周,最後一周。並轉成時間戳。(用於比較來判斷第幾周)

func getweeksequence(starttime time.time, endtime time.time, nowtime time.time) int

firstweekendday := planbegin + int64(7-weeknumber+1)*3600*24

if starttime.weekday() == 0

println("計畫開始時周幾:", starttime.weekday(), int(starttime.weekday()))

//最後一周的開始時間和結束時間(時間戳)

planend := endtime.unix()

lastweekdays := int(endtime.weekday()) - 1

//if int(plan.dateend.weekday()) == 0

if int(endtime.weekday()) == 0

lastweekendday := planend - int64(lastweekdays*3600*24)

println("")

fmt.printf("最後一周開始時間戳:%v,最後一周結束時間戳:%v", lastweekendday, planend)

//每週的結束時間

//總週數

weeks := (lastweekendday-firstweekendday)/604800 + 2

fmt.printf("取整 int:%d", (lastweekendday-firstweekendday)/604800)

floweeks := float32(lastweekendday-firstweekendday) / 604800

fmt.printf("floweeks: %f", floweeks)

if floweeks <= 1

fmt.printf("中間週數:%v,取餘:%v", weeks, (lastweekendday-firstweekendday)%604800)

weekunixs := make(int, 0)

//分成三種情況,一周,兩周,三周和三周以上

//一周:firstweekendday==lastweekendday

//兩周:secondweekendday==lastweekendday

println("")

//planweeks := 0

println("第一周結束時間戳:", firstweekendday, "form:", unixtoformtime(firstweekendday), "最後一周結束時間戳:", planend, "form:", unixtoformtime(planend))

if firstweekendday >= planend else if (firstweekendday + 604800) >= planend else

println("---------")

println("中間開始第一周第一天:", time.unix(int64(firstweekendday), 0).format(timelayout), "最後一周最後一天", time.unix(int64(lastweekendday), 0).format(timelayout), "週數:", int((lastweekendday-firstweekendday)/604800))

lastweekstartday := lastweekendday + 1

for i := 0; i < int((lastweekstartday-firstweekendday)/604800); i++

println("---------")

println("中間,長度:", len(weekunixs))

for index, value := range weekunixs

println("---------")

println("最後,長度:", len(weekunixs))

for index, value := range weekunixs

} for i := 0; i < len(weekunixs); i++

} println("本計畫的週數:", weeksequence)

return weeksequence

}func unixtoformtime(timestamp int64) string

PHP獲取本週開始時間

先設定時區 date default timezone set prc 網上的寫法 總覺得這週跨年或者跨月的時候會悲劇 未驗證 echo mktime 0,0,0,date m date d date w date y 同事的寫法 當本日為週日的時候 就坑了 echo strtotime last ...

JS獲取開始 結束時間

獲取本週 本季度 本月 上月的開始日期 結束日期 var now new date 當前日期 var nowdayofweek now.getday 今天本週的第幾天 var nowday now.getdate 當前日 var nowmonth now.getmonth 當前月 var nowye...

php 取開始時間和結束時間所跨越的所有季度時間

由起止日期算出其中所跨的季度 和各季度開始結束時間 params st 開始日期 y m d格式 et 結束日期 y m d格式 function getquarter st,et 取開始時間是屬於第幾季度 season st ceil date n stime 3 year st date y s...