// 测试 wxs 格式化函数的问题
|
|
// 模拟 wxs 中的 formatDateYYYYMMDD 函数
|
function formatDateYYYYMMDD_wxs(val) {
|
// 强制转换为字符串,兼容 null, undefined, number 等类型
|
var s = '' + val;
|
|
if (s.length < 10) {
|
return '—';
|
}
|
|
var out = '';
|
|
// 优先处理 '2024-07-31...' 格式
|
if (s.charAt(4) === '-' && s.charAt(7) === '-') {
|
out = s.slice(0, 10); // 使用 slice 替换 substr
|
return out;
|
}
|
|
// 备用处理 '2024/07/31...' 格式
|
if (s.charAt(4) === '/' && s.charAt(7) === '/') {
|
var year = s.slice(0, 4);
|
var month = s.slice(5, 7);
|
var day = s.slice(8, 10);
|
out = year + '-' + month + '-' + day;
|
return out;
|
}
|
|
// 对于无法识别的字符串格式,返回占位符
|
return '—';
|
}
|
|
// 模拟 JavaScript 中的 formatDateYYYYMMDD 函数
|
function formatDateYYYYMMDD_js(date) {
|
if (!date && date !== 0) return '—'
|
// 字符串:优先匹配 YYYY-MM-DD 直接返回,避免解析
|
if (typeof date === 'string') {
|
const m = date.match(/^(\d{4}-\d{2}-\d{2})/)
|
if (m) return m[1]
|
}
|
// 数值:时间戳(秒/毫秒)兜底
|
if (typeof date === 'number') {
|
const ts = date > 1e12 ? date : date * 1000
|
const d = new Date(ts)
|
if (!isNaN(d.getTime())) {
|
const y = d.getFullYear()
|
const m = String(d.getMonth() + 1).padStart(2, '0')
|
const day = String(d.getDate()).padStart(2, '0')
|
return `${y}-${m}-${day}`
|
}
|
}
|
// 其他情况走工具函数兜底
|
return '—'
|
}
|
|
console.log('🔍 测试 wxs 和 JavaScript 格式化函数的差异\n');
|
|
// 测试数据 - 来自后端的真实数据
|
const testDates = [
|
"2025-10-11T00:00",
|
"2025-10-06T00:00",
|
"2025-10-07T00:00",
|
"2025-10-04T00:00",
|
"2025-10-12T00:00"
|
];
|
|
console.log('📊 测试结果对比:');
|
console.log('─'.repeat(80));
|
console.log('原始数据'.padEnd(20) + 'wxs函数结果'.padEnd(20) + 'JS函数结果'.padEnd(20) + '是否一致');
|
console.log('─'.repeat(80));
|
|
testDates.forEach(date => {
|
const wxsResult = formatDateYYYYMMDD_wxs(date);
|
const jsResult = formatDateYYYYMMDD_js(date);
|
const isMatch = wxsResult === jsResult;
|
|
console.log(
|
date.padEnd(20) +
|
wxsResult.padEnd(20) +
|
jsResult.padEnd(20) +
|
(isMatch ? '✅' : '❌')
|
);
|
});
|
|
console.log('─'.repeat(80));
|
|
// 测试边界情况
|
console.log('\n🔍 测试边界情况:');
|
const edgeCases = [
|
null,
|
undefined,
|
"",
|
"2025-10-04",
|
"2025/10/04",
|
"invalid-date",
|
"2025-10-04T00:00:00.000Z"
|
];
|
|
edgeCases.forEach(testCase => {
|
const wxsResult = formatDateYYYYMMDD_wxs(testCase);
|
const jsResult = formatDateYYYYMMDD_js(testCase);
|
console.log(`输入: ${testCase} -> wxs: "${wxsResult}", js: "${jsResult}"`);
|
});
|
|
// 检查是否有固定返回值的问题
|
console.log('\n🚨 检查是否存在固定返回值问题:');
|
const uniqueWxsResults = [...new Set(testDates.map(formatDateYYYYMMDD_wxs))];
|
const uniqueJsResults = [...new Set(testDates.map(formatDateYYYYMMDD_js))];
|
|
console.log(`wxs函数返回的唯一值: ${uniqueWxsResults.join(', ')}`);
|
console.log(`JS函数返回的唯一值: ${uniqueJsResults.join(', ')}`);
|
|
if (uniqueWxsResults.length === 1 && testDates.length > 1) {
|
console.log('❌ 发现问题:wxs函数对所有不同输入返回相同值!');
|
} else {
|
console.log('✅ wxs函数正常处理不同输入');
|
}
|
|
if (uniqueJsResults.length === 1 && testDates.length > 1) {
|
console.log('❌ 发现问题:JS函数对所有不同输入返回相同值!');
|
} else {
|
console.log('✅ JS函数正常处理不同输入');
|
}
|