소스 검색

指标期数位移

gmy 7 달 전
부모
커밋
ebcd33ffc6
1개의 변경된 파일20개의 추가작업 그리고 7개의 파일을 삭제
  1. 20 7
      utils/common.go

+ 20 - 7
utils/common.go

@@ -1508,16 +1508,29 @@ func CalculateTradingDays(baseDate time.Time, tradingDays int) int {
 	return totalDays
 }
 
-// CalculateEndOfMonth 计算从当前到未来的月末的天数差
+// getLastDayOfMonth 获取某个月的最后一天
+func getLastDayOfMonth(t time.Time) time.Time {
+	// 移动到下个月的第一天,然后回退一天得到当前月的最后一天
+	return time.Date(t.Year(), t.Month(), 1, 0, 0, 0, 0, t.Location()).AddDate(0, 1, -1)
+}
+
+// CalculateEndOfMonth 使用天数计算未来月末的天数差
 func CalculateEndOfMonth(baseDate time.Time, months int) int {
-	// Move forward `months` months
-	newDate := baseDate.AddDate(0, months, 0)
+	// 假设每个月28天,然后算到目标月的下个月
+	daysToAdd := 28 * (months + 1)
+	// 计算目标月的下个月月初
+	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)
 
-	// Find the last day of the month
-	lastDay := time.Date(newDate.Year(), newDate.Month()+1, 1, 0, 0, 0, 0, newDate.Location()).AddDate(0, 0, -1)
+	// 计算天数差
+	daysDifference := int(lastDayOfTargetMonth.Sub(baseDate).Hours() / 24)
 
-	// Calculate the difference in days
-	return int(lastDay.Sub(baseDate).Hours() / 24)
+	return daysDifference
 }
 
 // CalculateEndOfQuarter 计算从当前到未来的季度末的天数差