2 Star 1 Fork 1

mosache / YFrame

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
timeUtil.go 6.61 KB
一键复制 编辑 原始数据 按行查看 历史
ヤ沒脩袮兲︶ 提交于 2023-06-06 18:42 . temp
package timeUtil
import (
"strconv"
"time"
)
var (
MAX_DAY_OF_MONTH = map[int]int{
1: 31,
2: 29,
3: 31,
4: 30,
5: 31,
6: 30,
7: 31,
8: 31,
9: 30,
10: 31,
11: 30,
12: 31,
}
)
/*
获取月份的最后一天
*/
func GetMonthMaxDay(year, month int) int {
if month != 2 {
return MAX_DAY_OF_MONTH[month]
} else {
/// 判断是否是闰年
if year%4 == 0 {
return 29
} else {
return 28
}
}
}
type MonthWeek struct {
StartUnix int64
EndUnix int64
}
func GetMonthWeek(nowYear, nowMonth int) []MonthWeek {
r := make([]MonthWeek, 0)
day1WeekDay := time.Date(nowYear, time.Month(nowMonth), 1, 0, 0, 0, 0, time.Local).Weekday()
var startDay = 1
/// sunday
if day1WeekDay == time.Sunday {
startDay = 2
} else if day1WeekDay == time.Monday {
startDay = 1
} else {
startDay = 1 + (8 - int(day1WeekDay))
}
week1StartUnix := time.Date(nowYear, time.Month(nowMonth), startDay, 0, 0, 0, 0, time.Local).Unix()
week1EndUnix := time.Date(nowYear, time.Month(nowMonth), startDay+6, 23, 59, 59, 0, time.Local).Unix()
r = append(r, MonthWeek{
StartUnix: week1StartUnix,
EndUnix: week1EndUnix,
})
week2StartUnix := time.Date(nowYear, time.Month(nowMonth), startDay+7, 0, 0, 0, 0, time.Local).Unix()
week2EndUnix := time.Date(nowYear, time.Month(nowMonth), startDay+13, 23, 59, 59, 0, time.Local).Unix()
r = append(r, MonthWeek{
StartUnix: week2StartUnix,
EndUnix: week2EndUnix,
})
week3StartUnix := time.Date(nowYear, time.Month(nowMonth), startDay+14, 0, 0, 0, 0, time.Local).Unix()
week3EndUnix := time.Date(nowYear, time.Month(nowMonth), startDay+20, 23, 59, 59, 0, time.Local).Unix()
r = append(r, MonthWeek{
StartUnix: week3StartUnix,
EndUnix: week3EndUnix,
})
week4StartUnix := time.Date(nowYear, time.Month(nowMonth), startDay+21, 0, 0, 0, 0, time.Local).Unix()
var week4EndUnix int64
if startDay+27 > GetMonthMaxDay(nowYear, nowMonth) {
var yearAdded = 0
if nowMonth == 12 {
yearAdded = 1
}
week4EndUnix = time.Date(nowYear+yearAdded, time.Month((nowMonth+1)%12), (startDay+27)-GetMonthMaxDay(nowYear, nowMonth), 23, 59, 59, 0, time.Local).Unix()
} else {
week4EndUnix = time.Date(nowYear, time.Month(nowMonth), GetMonthMaxDay(nowYear, nowMonth), 23, 59, 59, 0, time.Local).Unix()
}
r = append(r, MonthWeek{
StartUnix: week4StartUnix,
EndUnix: week4EndUnix,
})
/// 可能有week5
if startDay+28 <= GetMonthMaxDay(nowYear, nowMonth) {
week5tartUnix := time.Date(nowYear, time.Month(nowMonth), startDay+28, 0, 0, 0, 0, time.Local).Unix()
var week5EndUnix int64
var yearAdded = 0
if nowMonth == 12 {
yearAdded = 1
}
week5EndUnix = time.Date(nowYear+yearAdded, time.Month((nowMonth+1)%12), (startDay+34)-GetMonthMaxDay(nowYear, nowMonth), 23, 59, 59, 0, time.Local).Unix()
r = append(r, MonthWeek{
StartUnix: week5tartUnix,
EndUnix: week5EndUnix,
})
}
return r
}
func GetMonthWeek2(nowYear, nowMonth int) []MonthWeek {
r := make([]MonthWeek, 0)
week1StartUnix := time.Date(nowYear, time.Month(nowMonth), 1, 0, 0, 0, 0, time.Local).Unix()
week1EndUnix := time.Date(nowYear, time.Month(nowMonth), 7, 23, 59, 59, 0, time.Local).Unix()
r = append(r, MonthWeek{
StartUnix: week1StartUnix,
EndUnix: week1EndUnix,
})
week2StartUnix := time.Date(nowYear, time.Month(nowMonth), 8, 0, 0, 0, 0, time.Local).Unix()
week2EndUnix := time.Date(nowYear, time.Month(nowMonth), 15, 23, 59, 59, 0, time.Local).Unix()
r = append(r, MonthWeek{
StartUnix: week2StartUnix,
EndUnix: week2EndUnix,
})
week3StartUnix := time.Date(nowYear, time.Month(nowMonth), 16, 0, 0, 0, 0, time.Local).Unix()
week3EndUnix := time.Date(nowYear, time.Month(nowMonth), 22, 23, 59, 59, 0, time.Local).Unix()
r = append(r, MonthWeek{
StartUnix: week3StartUnix,
EndUnix: week3EndUnix,
})
week4StartUnix := time.Date(nowYear, time.Month(nowMonth), 23, 0, 0, 0, 0, time.Local).Unix()
week4EndUnix := time.Date(nowYear, time.Month(nowMonth), GetMonthMaxDay(nowYear, nowMonth), 23, 59, 59, 0, time.Local).Unix()
r = append(r, MonthWeek{
StartUnix: week4StartUnix,
EndUnix: week4EndUnix,
})
return r
}
func GetAgeWithIdentificationNumber(idCard string) int {
birYear, _ := strconv.Atoi(Substr(idCard, 6, 4))
birMonth, _ := strconv.Atoi(Substr(idCard, 10, 2))
age := time.Now().Year() - birYear
if int(time.Now().Month()) < birMonth {
age--
}
return age
}
func Substr(str string, start, length int) string {
rs := []rune(str)
rl := len(rs)
end := 0
if start < 0 {
start = rl - 1 + start
}
end = start + length
if start > end {
start, end = end, start
}
if start < 0 {
start = 0
}
if start > rl {
start = rl
}
if end < 0 {
end = 0
}
if end > rl {
end = rl
}
return string(rs[start:end])
}
/*
获取指定月的开始和结束的时间戳
unix 输入的时间戳
*/
func GetMonthStartAndEndUnixTime(unix int64) (int64, int64) {
unixTime := time.Unix(unix, 0)
year, month, _ := unixTime.Date()
/// 当月第一天结束时间
firstDayEnd := time.Date(year, month, 1, 23, 59, 59, 0, unixTime.Location())
/// 当月最后一天结束时间
lastDayEnd := firstDayEnd.AddDate(0, 1, -1)
firstDayStart := time.Date(firstDayEnd.Year(), firstDayEnd.Month(), 1, 0, 0, 0, 0, unixTime.Location())
return firstDayStart.Unix(), lastDayEnd.Unix()
}
/*
获取指定天的开始或结束的时间戳
flag 1 startTime 2 endTime
unix 输入的时间戳
*/
func GetDateStartOrEndUnixTime(unix int64, needMilliTime bool) (int64, int64) {
unixTime := time.Unix(unix, 0)
sUnixTime := time.Date(unixTime.Year(), unixTime.Month(), unixTime.Day(), 0, 0, 0, 0, unixTime.Location())
eUnixTime := time.Date(unixTime.Year(), unixTime.Month(), unixTime.Day(), 23, 59, 59, 0, unixTime.Location())
if needMilliTime {
return sUnixTime.UnixMilli(), eUnixTime.UnixMilli()
}
return sUnixTime.Unix(), eUnixTime.Unix()
}
/*
是否是今天
*/
func IsToday(unix int64) bool {
unixTime := time.Unix(unix, 0)
now := time.Now()
return unixTime.Year() == now.Year() && unixTime.Month() == now.Month() && unixTime.Day() == now.Day()
}
/*
是否是昨天
*/
func IsYesterday(unix int64) bool {
unixTime := time.Unix(unix, 0)
yesterday := time.Now().Add(-24 * time.Hour)
return unixTime.Year() == yesterday.Year() && unixTime.Month() == yesterday.Month() && unixTime.Day() == yesterday.Day()
}
/*
是否是本周
*/
func IsThisWeek(unix int64) bool {
unixTime := time.Unix(unix, 0)
now := time.Now()
year1, week1 := unixTime.ISOWeek()
year2, week2 := now.ISOWeek()
return year1 == year2 && week1 == week2
}
/*
是否是当月
*/
func IsThisMonth(unix int64) bool {
unixTime := time.Unix(unix, 0)
now := time.Now()
return unixTime.Year() == now.Year() && unixTime.Month() == now.Month()
}
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Go
1
https://gitee.com/mosache/YFrame.git
git@gitee.com:mosache/YFrame.git
mosache
YFrame
YFrame
v0.1.38

搜索帮助

344bd9b3 5694891 D2dac590 5694891