goang 关于时间处理的一些问题

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
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值