fix:修改前端显示时间错误

This commit is contained in:
fengyarnom 2025-05-15 16:44:38 +08:00
parent ab3b382032
commit bcf7df31da
3 changed files with 32 additions and 24 deletions

View File

@ -47,7 +47,7 @@ func (dao *SensorDAO) GetAggregatedData(start, end time.Time, interval string) (
case "5min":
query = `
SELECT
MIN(timestamp) as ts,
DATE_FORMAT(timestamp, '%Y-%m-%dT%H:%i:%s') as ts,
ROUND(AVG(temperature)/10, 1) as avg_temp,
MAX(rainfall) - MIN(rainfall) as rainfall,
ROUND(AVG(humidity)/10, 1) as avg_humidity,
@ -60,7 +60,7 @@ func (dao *SensorDAO) GetAggregatedData(start, end time.Time, interval string) (
case "30min":
query = `
SELECT
MIN(timestamp) as ts,
DATE_FORMAT(timestamp, '%Y-%m-%dT%H:%i:%s') as ts,
ROUND(AVG(temperature)/10, 1) as avg_temp,
MAX(rainfall) - MIN(rainfall) as rainfall,
ROUND(AVG(humidity)/10, 1) as avg_humidity,
@ -73,7 +73,7 @@ func (dao *SensorDAO) GetAggregatedData(start, end time.Time, interval string) (
default: // 1hour
query = `
SELECT
MIN(timestamp) as ts,
DATE_FORMAT(timestamp, '%Y-%m-%dT%H:%i:%s') as ts,
ROUND(AVG(temperature)/10, 1) as avg_temp,
MAX(rainfall) - MIN(rainfall) as rainfall,
ROUND(AVG(humidity)/10, 1) as avg_humidity,
@ -102,7 +102,12 @@ func (dao *SensorDAO) GetAggregatedData(start, end time.Time, interval string) (
logger.Logger.Printf("扫描数据行失败: %v", err)
continue
}
data.Timestamp, _ = time.Parse("2006-01-02 15:04:05", tsStr)
// 解析ISO格式的时间字符串
data.Timestamp, err = time.Parse("2006-01-02T15:04:05", tsStr)
if err != nil {
logger.Logger.Printf("解析时间失败: %v", err)
continue
}
result = append(result, data)
}

View File

@ -45,7 +45,14 @@ func (h *SensorHandler) GetAggregatedData(w http.ResponseWriter, r *http.Request
}
w.Header().Set("Content-Type", "application/json")
json.NewEncoder(w).Encode(data)
// 使用自定义的编码器,设置时间格式
encoder := json.NewEncoder(w)
encoder.SetIndent("", " ")
if err := encoder.Encode(data); err != nil {
logger.Logger.Printf("JSON编码失败: %v", err)
http.Error(w, "服务器内部错误", http.StatusInternalServerError)
return
}
}
// 处理静态文件

View File

@ -213,17 +213,15 @@
}
const labels = data.map(item => {
// 确保使用正确的时间格式解析
const date = new Date(item.timestamp.replace(' ', 'T') + 'Z');
// 调整为本地时间
const localDate = new Date(date.getTime() + (8 * 60 * 60 * 1000));
// 直接解析ISO格式的时间字符串
const date = new Date(item.timestamp);
// 格式化为中文日期时间格式
return localDate.getFullYear() + '/' +
(localDate.getMonth() + 1).toString().padStart(2, '0') + '/' +
localDate.getDate().toString().padStart(2, '0') + ' ' +
localDate.getHours().toString().padStart(2, '0') + ':' +
localDate.getMinutes().toString().padStart(2, '0');
return date.getFullYear() + '/' +
(date.getMonth() + 1).toString().padStart(2, '0') + '/' +
date.getDate().toString().padStart(2, '0') + ' ' +
date.getHours().toString().padStart(2, '0') + ':' +
date.getMinutes().toString().padStart(2, '0');
});
mainChart = new Chart(ctx, {
@ -288,18 +286,16 @@
data.forEach(item => {
const row = document.createElement('tr');
// 确保使用正确的时间格式解析
const date = new Date(item.timestamp.replace(' ', 'T') + 'Z');
// 调整为本地时间
const localDate = new Date(date.getTime() + (8 * 60 * 60 * 1000));
// 直接解析ISO格式的时间字符串
const date = new Date(item.timestamp);
const formattedDate =
localDate.getFullYear() + '/' +
(localDate.getMonth() + 1).toString().padStart(2, '0') + '/' +
localDate.getDate().toString().padStart(2, '0') + ' ' +
localDate.getHours().toString().padStart(2, '0') + ':' +
localDate.getMinutes().toString().padStart(2, '0') + ':' +
localDate.getSeconds().toString().padStart(2, '0');
date.getFullYear() + '/' +
(date.getMonth() + 1).toString().padStart(2, '0') + '/' +
date.getDate().toString().padStart(2, '0') + ' ' +
date.getHours().toString().padStart(2, '0') + ':' +
date.getMinutes().toString().padStart(2, '0') + ':' +
date.getSeconds().toString().padStart(2, '0');
row.innerHTML = `
<td>${formattedDate}</td>