golang 获取当前日期,月份第一天和最后一天
now := time.Now()
currentYear, currentMonth, _ := now.Date()
currentLocation := now.Location()
firstOfMonth := time.Date(currentYear, currentMonth, 1, 0, 0, 0, 0, currentLocation)
lastOfMonth := firstOfMonth.AddDate(0, 1, -1)
fmt.Println(firstOfMonth.Unix())
fmt.Println(lastOfMonth.Unix())
layout := "2006-01-02 15:04:05"
loc, _:= time.LoadLocation("Asia/Chongqing")
zero_day, _ := time.ParseInLocation(layout, "1949-10-01 00:00:00", loc)
获取当前月份的数值型的值
//time.Now().Month()获取的值为英文月份缩写
int(time.Now().Month())
计算两个日期的日期差
time 包有个函数 Parse
可以将时间字符串解析成 Time
对象,而 Time
对象有个 Sub
方法可以计算与某个时间的差,返回值是 Duration
对象,而 Duration
有一个 Hours
方法,除以 24 就是天数了
a, _ := time.Parse("2006-01-02", "2017-09-01")
b, _ := time.Parse("2006-01-02", "2018-03-11")
d := a.Sub(b)
day := d.Hours() / 24
日期型转时间戳
/**
日期转时间戳
*/
func DateToUnix(date string) int {
loc, _ := time.LoadLocation("Asia/Shanghai") //设置时区
unix, _ := time.ParseInLocation("2006-01-02", date, loc) //2006-01-02 15:04:05是转换的格式如php的"Y-m-d H:i:s"
return int(unix.Unix())
}
时间戳转日期型
/**
时间戳转日期
*/
func UnixToDate(date int, typeVal int) string {
if typeVal == 1 {
return time.Unix(int64(date), 0).Format("2006-01-02 15:04:05")
} else {
return time.Unix(int64(date), 0).Format("2006-01-02")
}
}
日期字符串转日期格式
/**
日期字符串转为日期格式
*/
func FormatDatetime(dateTime string, cate int) time.Time {
var res time.Time
if cate == 0 { // datetime
res, _ = time.ParseInLocation("2006-01-02 15:04:05", dateTime, time.Local)
} else { //date
res, _ = time.ParseInLocation("2006-01-02", dateTime, time.Local)
}
return res
}
获取当前日期是今年的第几周
//返回年、周
time.Now().ISOWeek()
已知年份、周 确定某周的开始时间 结束日期
/**
根据年 周 确定某周的开始时间 结束时间
*/
func GetMonthFromWeek(year int, week int) (time.Time, time.Time) {
//年开始时间
startTime, _ := time.ParseInLocation("2006-01-02", strconv.Itoa(year)+"-01-01", time.Local)
//计算年开始时间是哪年的周
yearData, _ := startTime.ISOWeek()
//计算年开始为周几
startWeekDay := startTime.Weekday()
//周的开始时间
startTarget := time.Now()
//周的结束时间
endTarget := time.Now()
//1月1日所在周为本年第一周
if yearData == year {
startTarget = startTime.AddDate(0,0,7 * (week - 1) - int(startWeekDay) )
endTarget = startTime.AddDate(0,0,7 * (week - 1) + 7 - int(startWeekDay) )
//1月1日所在周的下一周为本年第一周
}else {
startTarget = startTime.AddDate(0,0,7 * week - int(startWeekDay) )
endTarget = startTime.AddDate(0,0,7 * week + 7 - int(startWeekDay) )
}
//monthTarget := int( startTarget.Month() )
//if startTarget.Year() < year {
// monthTarget = 1
//}else if startTarget.Year() > year {
// monthTarget = 12
//}
return startTarget,endTarget
}