|
@@ -1547,8 +1547,30 @@ func daysInMonth(year int, month time.Month) int {
|
|
|
return 31
|
|
|
}
|
|
|
|
|
|
-// CalculateEndOfMonth 计算从 baseDate 开始经过 months 后目标月的最后一天距离 baseDate 的天数差
|
|
|
+// CalculateEndOfMonth 使用天数计算未来月末的天数差
|
|
|
func CalculateEndOfMonth(baseDate time.Time, months, moveType int) int {
|
|
|
+ // 假设每个月28天,然后算到目标月的下个月
|
|
|
+ daysToAdd := 28 * (months + 2)
|
|
|
+ // 计算目标月的下个月月初
|
|
|
+ if moveType == 2 {
|
|
|
+ daysToAdd = -(daysToAdd - 56)
|
|
|
+ }
|
|
|
+ nextMonth := baseDate.AddDate(0, 0, daysToAdd)
|
|
|
+
|
|
|
+ // 获取目标月月初的第一天
|
|
|
+ firstDayOfNextMonth := time.Date(nextMonth.Year(), nextMonth.Month(), 1, 0, 0, 0, 0, nextMonth.Location())
|
|
|
+
|
|
|
+ // 获取目标月的最后一天(即月初减去1天)
|
|
|
+ lastDayOfTargetMonth := firstDayOfNextMonth.AddDate(0, 0, -1)
|
|
|
+
|
|
|
+ // 计算天数差
|
|
|
+ daysDifference := int(math.Abs(lastDayOfTargetMonth.Sub(baseDate).Hours() / 24))
|
|
|
+
|
|
|
+ return daysDifference
|
|
|
+}
|
|
|
+
|
|
|
+// CalculateEndOfMonth 计算从 baseDate 开始经过 months 后目标月的最后一天距离 baseDate 的天数差
|
|
|
+/*func CalculateEndOfMonth(baseDate time.Time, months, moveType int) int {
|
|
|
// 初始化目标日期
|
|
|
targetDate := baseDate
|
|
|
|
|
@@ -1560,7 +1582,8 @@ func CalculateEndOfMonth(baseDate time.Time, months, moveType int) int {
|
|
|
// 手动计算目标月份,通过加月份天数循环处理
|
|
|
for i := 0; i < int(math.Abs(float64(months))); i++ {
|
|
|
// 获取当前月份的天数
|
|
|
- days := daysInMonth(targetDate.Year(), targetDate.Month())
|
|
|
+
|
|
|
+ days := daysInMonth(targetDate.Year(), targetDate.Month()+1)
|
|
|
|
|
|
// 根据 moveType 来前进或后退天数
|
|
|
if months > 0 {
|
|
@@ -1580,7 +1603,7 @@ func CalculateEndOfMonth(baseDate time.Time, months, moveType int) int {
|
|
|
daysDifference := int(math.Abs(lastDayOfTargetMonth.Sub(baseDate).Hours() / 24))
|
|
|
|
|
|
return daysDifference
|
|
|
-}
|
|
|
+}*/
|
|
|
|
|
|
// CalculateDekadTime 计算旬度时间
|
|
|
func CalculateDekadTime(baseDate time.Time, tradingDays, moveType int) int {
|
|
@@ -1615,7 +1638,8 @@ func adjustToNearestDekad(date time.Time) time.Time {
|
|
|
day := date.Day()
|
|
|
lastDayOfMonth := getLastDayOfMonth(date).Day()
|
|
|
|
|
|
- if day <= 11 {
|
|
|
+ // 这里有些无可奈何了,暂时这么写吧。。。需要跟据润 平年根据每个月进行单独处理
|
|
|
+ if day > 5 && day <= 11 {
|
|
|
return time.Date(date.Year(), date.Month(), 10, 0, 0, 0, 0, date.Location())
|
|
|
} else if day <= 21 {
|
|
|
return time.Date(date.Year(), date.Month(), 20, 0, 0, 0, 0, date.Location())
|