diff --git a/backend/database.js b/backend/database.js index 6667532..10c88b0 100644 --- a/backend/database.js +++ b/backend/database.js @@ -303,7 +303,9 @@ const ShareDB = { if (expiry_days) { const expireDate = new Date(); expireDate.setDate(expireDate.getDate() + parseInt(expiry_days)); - expiresAt = expireDate.toISOString(); + // 转换为SQLite datetime格式 (YYYY-MM-DD HH:MM:SS),而不是ISO格式 + // 这样才能正确与 datetime('now') 进行比较 + expiresAt = expireDate.toISOString().replace('T', ' ').replace(/\.\d+Z$/, ''); } const stmt = db.prepare(` diff --git a/backend/fix_expires_at_format.js b/backend/fix_expires_at_format.js new file mode 100644 index 0000000..c039db7 --- /dev/null +++ b/backend/fix_expires_at_format.js @@ -0,0 +1,34 @@ +const { db } = require('./database'); + +console.log('开始修复 expires_at 格式...\n'); + +// 查找所有有过期时间的分享 +const shares = db.prepare(` + SELECT id, share_code, expires_at + FROM shares + WHERE expires_at IS NOT NULL +`).all(); + +console.log(`找到 ${shares.length} 条需要修复的记录\n`); + +let fixed = 0; +const updateStmt = db.prepare('UPDATE shares SET expires_at = ? WHERE id = ?'); + +shares.forEach(share => { + const oldFormat = share.expires_at; + + // 如果是ISO格式(包含T和Z),需要转换 + if (oldFormat.includes('T') || oldFormat.includes('Z')) { + // 转换为 SQLite datetime 格式: YYYY-MM-DD HH:MM:SS + const newFormat = oldFormat.replace('T', ' ').replace(/\.\d+Z$/, ''); + + updateStmt.run(newFormat, share.id); + fixed++; + + console.log(`✓ 修复分享 ${share.share_code}:`); + console.log(` 旧格式: ${oldFormat}`); + console.log(` 新格式: ${newFormat}\n`); + } +}); + +console.log(`\n修复完成! 共修复 ${fixed} 条记录`);