CN-928 fix: 调整时区方案

This commit is contained in:
chenjinsong
2023-03-13 16:48:37 +08:00
parent b1e67452a5
commit f4a8ef68c0
8 changed files with 62 additions and 34 deletions

View File

@@ -79,7 +79,7 @@
<script>
import { ref, computed, watch, reactive } from 'vue'
import { storageKey } from '@/utils/constants'
import { getMillisecond, timestampToList } from '@/utils/date-util'
import { getMillisecond, millTimestampDiffFromTz, timestampToList } from '@/utils/date-util'
import { useStore } from 'vuex'
export default {
@@ -220,8 +220,9 @@ export default {
* @param val开始/结束时间数组
*/
const timeArrChange = (val) => {
myStartTime.value = getMillisecond(val[0])
myEndTime.value = getMillisecond(val[1])
// 按服务器时区修正时间戳
myStartTime.value = getMillisecond(val[0]) + millTimestampDiffFromTz()
myEndTime.value = getMillisecond(val[1]) + millTimestampDiffFromTz()
isCustom.value = true
dateRangeValue.value = -1
returnValue()

View File

@@ -47,7 +47,7 @@ export function toTime (date) {
}
// 时间格式转换
export function dateFormat (date, format = 'YYYY-MM-DD HH:mm:ss') {
let d = date
let d
// date不是数字则视为utc时区的时间字符串例如2022-02-22 22:22
if (isNaN(date)) {
d = window.$dayJs(date).valueOf() + parseInt(localStorage.getItem(storageKey.timezoneLocalOffset)) * 3600000
@@ -93,6 +93,47 @@ export function timestampToList (time) {
const m = date.getMinutes()
const s = date.getSeconds()
const arr = [Y, M, D, H, m, s]
return arr
return [Y, M, D, H, m, s]
}
/**
* 返回浏览器本地时区和服务器时区的毫秒差
* @returns {number}
*/
export function millTimestampDiffFromTz () {
return parseInt(localStorage.getItem(storageKey.timezoneLocalOffset)) * 3600 * 1000 - window.$dayJs.tz().utcOffset() * 60 * 1000
}
/**
* echarts时间类型横坐标formatter
* @returns {String}
*/
export function xAxisTimeFormatter (value) {
const date = new Date(value - millTimestampDiffFromTz())
const dayStart = new Date(value - millTimestampDiffFromTz())
dayStart.setHours(0)
dayStart.setMinutes(0)
dayStart.setSeconds(0)
dayStart.setMilliseconds(0)
const hourStart = new Date(value - millTimestampDiffFromTz())
hourStart.setMinutes(0)
hourStart.setSeconds(0)
hourStart.setMilliseconds(0)
const HHmm = (date.getHours() < 10 ? `0${date.getHours()}` : date.getHours()) +
':' +
(date.getMinutes() < 10 ? `0${date.getMinutes()}` : date.getMinutes())
// 如果是一天的开始
if (date.getTime() === dayStart.getTime()) {
return '{day|' + dayStart.getDate() + '}'
} else if (date.getTime() === hourStart.getTime()) {
return '{hour|' + HHmm + '}'
} else {
return HHmm
}
}
export const xAxisTimeRich = {
day: {
fontWeight: 'bold'
},
hour: {
fontWeight: 'bold'
}
}

View File

@@ -370,17 +370,12 @@ export default {
}
},
setup (props) {
const { currentRoute } = useRouter()
function isEntityDetail (r) {
return r.indexOf('entityDetail') > -1
}
const dateRangeValue = isEntityDetail(currentRoute.value.path) ? 60 * 24 : 60
const dateRangeValue = 60
const { startTime, endTime } = getNowTime(dateRangeValue)
// entity详情内的chart时间工具不是公共的需要单独定义
const chartTimeFilter = ref({ startTime, endTime, dateRangeValue })
// 复制一份prop中需要被组件v-model的内容避免报错
const copyOrderPieTable = props.orderPieTable
const copyOrderPieTable = ref(props.orderPieTable)
return {
chartTimeFilter,
chartTableTopOptions,

View File

@@ -107,11 +107,8 @@ export default {
const { params } = useRoute()
panelType = props.entity ? props.entity.type : panelTypeAndRouteMapping[params.typeName]
function isEntityDetail (t) {
return [4, 5, 6].indexOf(t) > -1
}
// date
const dateRangeValue = isEntityDetail(panelType) ? 60 * 24 : 60
const dateRangeValue = 60
const { startTime, endTime } = getNowTime(dateRangeValue)
const timeFilter = ref({ startTime, endTime, dateRangeValue })

View File

@@ -239,19 +239,16 @@ export default {
panelType = props.entity ? props.entity.type : panelTypeAndRouteMapping[params.typeName]
}
function isEntityDetail (t) {
return [4, 5, 6].indexOf(t) > -1
}
// 获取url携带的range、startTime、endTime
const rangeParam = query.range
const startTimeParam = query.startTime
const endTimeParam = query.endTime
// 若url携带了使用携带的值否则使用默认值。
const dateRangeValue = rangeParam ? parseInt(query.range) : (isEntityDetail(panelType) ? 60 * 24 : 60)
const dateRangeValue = rangeParam ? parseInt(query.range) : 60
const timeFilter = ref({ dateRangeValue })
if (!startTimeParam || !endTimeParam) {
const { startTime, endTime } = getNowTime(isEntityDetail(panelType) ? 60 * 24 : 60)
const { startTime, endTime } = getNowTime(60)
timeFilter.value.startTime = startTime
timeFilter.value.endTime = endTime
} else {

View File

@@ -8,6 +8,7 @@ import {
} from '@/utils/constants'
import unitConvert from '@/utils/unit-convert'
import { axisFormatter } from '@/views/charts/charts/tools'
import { xAxisTimeFormatter, xAxisTimeRich } from '@/utils/date-util'
export const pieChartOption1 = {
tooltip: {
@@ -185,15 +186,11 @@ export const stackedLineChartOption = {
xAxis: [
{
type: 'time',
splitNumber: 8
// axisLabel: {
// formatter: function (value) {
// const data = new Date(value)
// const h = data.getHours() > 9 ? data.getHours() : '0' + data.getHours()
// const m = data.getMinutes() > 9 ? data.getMinutes() : '0' + data.getMinutes()
// return h + ':' + m
// }
// }
splitNumber: 8,
axisLabel: {
formatter: xAxisTimeFormatter,
rich: xAxisTimeRich
}
}
],
yAxis: [

View File

@@ -864,7 +864,7 @@ export default {
setup () {
const { params } = useRoute()
const pageType = params.typeName
const dateRangeValue = 60 * 24
const dateRangeValue = 60
const { startTime, endTime } = getNowTime(dateRangeValue)
const timeFilter = ref({ startTime, endTime, dateRangeValue })

View File

@@ -717,7 +717,7 @@ export default {
}
},
setup () {
const dateRangeValue = 60 * 24
const dateRangeValue = 60
const { startTime, endTime } = getNowTime(dateRangeValue)
const timeFilter = ref({ startTime, endTime, dateRangeValue })
return {