1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 |
- package utility
- import (
- "app.yhyue.com/moapp/jybase/common"
- "github.com/gogf/gf/v2/util/gconv"
- "time"
- )
- type DateComp struct {
- Num int
- Unit int // 1-天 2-月 3-年 4-季
- }
- func GetStartAndEndTime(s time.Time, d ...DateComp) (st, et time.Time) {
- var stDate time.Time
- if s.IsZero() {
- now := time.Now()
- stDate = time.Date(now.Year(), now.Month(), now.Day(), 0, 0, 0, 0, time.Local)
- } else {
- stDate = time.Date(s.Year(), s.Month(), s.Day(), 0, 0, 0, 0, time.Local)
- }
- var et1 time.Time
- st, et1 = stDate, stDate
- for _, comp := range d {
- if comp.Num > 0 {
- switch comp.Unit {
- case 1: //天
- et1 = et1.AddDate(0, 0, comp.Num)
- case 2:
- et1 = et1.AddDate(0, comp.Num, 0)
- case 4:
- et1 = et1.AddDate(0, comp.Num*3, 0)
- case 3:
- et1 = et1.AddDate(comp.Num, 0, 0)
- }
- }
- }
- et = time.Date(et1.Year(), et1.Month(), et1.Day(), 23, 59, 59, 0, time.Local)
- return
- }
- func GetMonthDayNum(startTime, endTime time.Time) float64 {
- // 定义开始时间和结束时间
- //start := time.Date(2024, time.January, 1, 0, 0, 0, 0, time.UTC)
- //end := time.Date(2024, time.March, 30, 0, 0, 0, 0, time.UTC)
- var months, day int
- // 获取开始时间和结束时间的年份和月份
- startYear, startMonth, startDay := startTime.Date()
- endYear, endMonth, endDay := endTime.Date()
- // 计算月份差异
- months = (endYear-startYear)*12 + int(endMonth-startMonth)
- if endDay > startDay {
- day = endDay - startDay
- } else if endDay < startDay {
- months -= 1
- months = common.If(months < 0, 0, months).(int)
- day = gconv.Int(endTime.Sub(startTime.AddDate(0, months, 0)).Hours()) / 24
- }
- //fmt.Printf("月份差异为:%d\n", months)
- return gconv.Float64(months) + gconv.Float64(day)/30
- }
- func GetMonthNum(num, cycleType int) (monthCount int) {
- switch cycleType { // 类型 1天 2月 3年 4季度
- case 1:
- if num%30 > 0 {
- monthCount = num/30 + 1
- } else {
- monthCount = num / 30
- }
- case 2:
- monthCount = num
- case 3:
- monthCount = num * 12
- case 4:
- monthCount = num * 3
- }
- return
- }
- func GetMonthNumTime(startTime, endTime time.Time) (monthCount int) {
- // 定义开始时间和结束时间
- //start := time.Date(2024, time.January, 1, 0, 0, 0, 0, time.UTC)
- //end := time.Date(2024, time.March, 30, 0, 0, 0, 0, time.UTC)
- // 获取开始时间和结束时间的年份和月份
- startYear, startMonth, startDay := startTime.Date()
- endYear, endMonth, endDay := endTime.Date()
- // 计算月份差异
- months := (endYear-startYear)*12 + int(endMonth-startMonth)
- if endDay-startDay > 0 {
- months += 1
- }
- //fmt.Printf("月份差异为:%d\n", months)
- return months
- }
|