lfqian commited on
Commit
b978dde
·
1 Parent(s): a6e26a7

Fix date normalization and add debug logs for missing last trading day issue

Browse files
Files changed (1) hide show
  1. src/lib/dataService.js +25 -3
src/lib/dataService.js CHANGED
@@ -178,15 +178,37 @@ class DataService {
178
  // 构建完整时间序列
179
  const seq = allDecisions
180
  .filter(r => r.agent_name === row.agent_name && r.asset === row.asset && r.model === row.model)
181
- .sort((a, b) => (a.date > b.date ? 1 : -1))
 
 
 
 
 
 
182
 
183
  const isCrypto = row.asset === 'BTC' || row.asset === 'ETH'
184
  const seqFiltered = isCrypto ? seq : (await filterRowsToNyseTradingDays(seq))
185
 
186
- // 计算日期范围
187
- const dates = seqFiltered.map(s => s.date).filter(Boolean).sort()
 
 
 
 
 
 
188
  const start_date = dates[0] || '-'
189
  const end_date = dates[dates.length - 1] || '-'
 
 
 
 
 
 
 
 
 
 
190
 
191
  let closed_days = 0
192
  if (dates.length > 1) {
 
178
  // 构建完整时间序列
179
  const seq = allDecisions
180
  .filter(r => r.agent_name === row.agent_name && r.asset === row.asset && r.model === row.model)
181
+ .map(r => ({ ...r, dateNormalized: typeof r.date === 'string' ? r.date.split('T')[0] : r.date }))
182
+ .sort((a, b) => {
183
+ // 确保日期格式一致后再排序
184
+ const dateA = a.dateNormalized || a.date
185
+ const dateB = b.dateNormalized || b.date
186
+ return dateA > dateB ? 1 : (dateA < dateB ? -1 : 0)
187
+ })
188
 
189
  const isCrypto = row.asset === 'BTC' || row.asset === 'ETH'
190
  const seqFiltered = isCrypto ? seq : (await filterRowsToNyseTradingDays(seq))
191
 
192
+ // 计算日期范围 - 使用标准化后的日期
193
+ const dates = seqFiltered
194
+ .map(s => {
195
+ const dateStr = s.dateNormalized || (typeof s.date === 'string' ? s.date.split('T')[0] : s.date)
196
+ return dateStr
197
+ })
198
+ .filter(Boolean)
199
+ .sort()
200
  const start_date = dates[0] || '-'
201
  const end_date = dates[dates.length - 1] || '-'
202
+
203
+ // Debug: 检查原始序列和过滤后的序列的日期范围
204
+ if (seq.length > 0 && seqFiltered.length > 0) {
205
+ const originalDates = seq.map(r => r.dateNormalized || (typeof r.date === 'string' ? r.date.split('T')[0] : r.date)).filter(Boolean).sort()
206
+ const lastOriginal = originalDates[originalDates.length - 1]
207
+ const lastFiltered = dates[dates.length - 1]
208
+ if (lastOriginal !== lastFiltered && !isCrypto) {
209
+ console.warn(`[DataService] Date mismatch for ${row.agent_name}|${row.asset}|${row.model}: Original last date: ${lastOriginal}, Filtered last date: ${lastFiltered}`)
210
+ }
211
+ }
212
 
213
  let closed_days = 0
214
  if (dates.length > 1) {