use the daylight saving time zone as default time zone rather than the current standard time zone during the DST

This commit is contained in:
MaysWind
2025-12-24 00:33:47 +08:00
parent c35cbbda15
commit 76af5d946a
96 changed files with 1179 additions and 882 deletions
@@ -45,13 +45,6 @@ import { type CommonDateRangeSelectionProps, useDateRangeSelectionBase } from '@
import { useEnvironmentsStore } from '@/stores/environment.ts';
import {
getLocalDatetimeFromUnixTime,
getDummyUnixTimeForLocalUsage,
getTimezoneOffsetMinutes,
getBrowserTimezoneOffsetMinutes
} from '@/lib/datetime.ts';
type DateTimePickerType = InstanceType<typeof DateTimePicker>;
const props = defineProps<CommonDateRangeSelectionProps>();
@@ -62,7 +55,14 @@ const emit = defineEmits<{
const { tt } = useI18n();
const { showToast } = useI18nUIComponents();
const { dateRange, beginDateTime, endDateTime, presetRanges, getFinalDateRange } = useDateRangeSelectionBase(props);
const {
dateRange,
beginDateTime,
endDateTime,
presetRanges,
getLocalDatetimeFromSameDateTimeOfUnixTime,
getFinalDateRange
} = useDateRangeSelectionBase(props);
const environmentsStore = useEnvironmentsStore();
@@ -91,11 +91,11 @@ function cancel(): void {
function onSheetOpen(): void {
if (props.minTime) {
dateRange.value[0] = getLocalDatetimeFromUnixTime(getDummyUnixTimeForLocalUsage(props.minTime, getTimezoneOffsetMinutes(), getBrowserTimezoneOffsetMinutes()));
dateRange.value[0] = getLocalDatetimeFromSameDateTimeOfUnixTime(props.minTime);
}
if (props.maxTime) {
dateRange.value[1] = getLocalDatetimeFromUnixTime(getDummyUnixTimeForLocalUsage(props.maxTime, getTimezoneOffsetMinutes(), getBrowserTimezoneOffsetMinutes()));
dateRange.value[1] = getLocalDatetimeFromSameDateTimeOfUnixTime(props.maxTime);
}
window.dispatchEvent(new Event('resize')); // fix vue-datepicker preset max-width
@@ -111,9 +111,7 @@ import { NumeralSystem } from '@/core/numeral.ts';
import { isDefined } from '@/lib/common.ts';
import {
getHourIn12HourFormat,
getLocalDatetimeFromUnixTime,
getCurrentUnixTime,
getUnixTimeFromLocalDatetime,
getAMOrPM,
getCombinedDateAndTimeValues
} from '@/lib/datetime.ts';
@@ -122,6 +120,7 @@ type DateTimePickerType = InstanceType<typeof DateTimePicker>;
const props = defineProps<{
modelValue: number;
timezoneUtcOffset: number;
initMode?: string;
show: boolean;
}>();
@@ -144,6 +143,8 @@ const {
isSecondTwoDigits,
isMeridiemIndicatorFirst,
meridiemItems,
getLocalDatetimeFromSameDateTimeOfUnixTime,
getUnixTimeFromSameDateTimeOfLocalDatetime,
getDisplayTimeValue,
generateAllHours,
generateAllMinutesOrSeconds
@@ -160,7 +161,7 @@ let resetTimePickerItemPositionItemsLastOffsetTop: number | undefined = undefine
let resetTimePickerItemPositionCheckedFrames: number | undefined = undefined;
const mode = ref<string>(props.initMode || 'time');
const dateTime = ref<Date>(getLocalDatetimeFromUnixTime(props.modelValue || getCurrentUnixTime()));
const dateTime = ref<Date>(getLocalDatetimeFromSameDateTimeOfUnixTime(props.modelValue || getCurrentUnixTime(), props.timezoneUtcOffset));
const timePickerContainerHeight = ref<number | undefined>(undefined);
const timePickerItemHeight = ref<number | undefined>(undefined);
@@ -213,7 +214,7 @@ function switchMode(): void {
}
function setCurrentTime(): void {
dateTime.value = getLocalDatetimeFromUnixTime(getCurrentUnixTime());
dateTime.value = getLocalDatetimeFromSameDateTimeOfUnixTime(getCurrentUnixTime(), props.timezoneUtcOffset);
if (mode.value === 'time') {
scrollAllTimeSelectedItems();
@@ -225,7 +226,7 @@ function confirm(): void {
return;
}
const unixTime = getUnixTimeFromLocalDatetime(dateTime.value);
const unixTime = getUnixTimeFromSameDateTimeOfLocalDatetime(dateTime.value, props.timezoneUtcOffset);
if (unixTime < 0) {
showToast('Date is too early');
@@ -420,7 +421,7 @@ function onSheetOpen(): void {
mode.value = props.initMode || 'time';
if (props.modelValue) {
dateTime.value = getLocalDatetimeFromUnixTime(props.modelValue);
dateTime.value = getLocalDatetimeFromSameDateTimeOfUnixTime(props.modelValue, props.timezoneUtcOffset);
}
if (mode.value === 'time') {
+10 -8
View File
@@ -144,6 +144,7 @@ import {
isNumber
} from '@/lib/common.ts';
import {
parseDateTimeFromUnixTime,
getYearMonthFirstUnixTime,
getYearMonthLastUnixTime,
getDateTypeByDateRange,
@@ -200,11 +201,11 @@ const emit = defineEmits<{
const {
tt,
formatUnixTimeToShortDate,
formatUnixTimeToGregorianLikeShortYear,
formatUnixTimeToGregorianLikeShortYearMonth,
formatDateTimeToShortDate,
formatDateTimeToGregorianLikeShortYear,
formatDateTimeToGregorianLikeShortYearMonth,
formatYearQuarterToGregorianLikeYearQuarter,
formatUnixTimeToGregorianLikeFiscalYear,
formatDateTimeToGregorianLikeFiscalYear,
formatAmountToLocalizedNumeralsWithCurrency
} = useI18n();
@@ -324,18 +325,19 @@ const allDisplayDataItems = computed<TrendsBarChartData>(() => {
dateRangeKey = `${dateRange.year}-${dateRange.month}-${dateRange.day}`;
}
const minDateTime = parseDateTimeFromUnixTime(dateRange.minUnixTime);
let displayDateRange = '';
if (props.dateAggregationType === ChartDateAggregationType.Year.type) {
displayDateRange = formatUnixTimeToGregorianLikeShortYear(dateRange.minUnixTime);
displayDateRange = formatDateTimeToGregorianLikeShortYear(minDateTime);
} else if (props.dateAggregationType === ChartDateAggregationType.FiscalYear.type) {
displayDateRange = formatUnixTimeToGregorianLikeFiscalYear(dateRange.minUnixTime);
displayDateRange = formatDateTimeToGregorianLikeFiscalYear(minDateTime);
} else if (props.dateAggregationType === ChartDateAggregationType.Quarter.type && 'quarter' in dateRange) {
displayDateRange = formatYearQuarterToGregorianLikeYearQuarter(dateRange.year, dateRange.quarter);
} else if (props.dateAggregationType === ChartDateAggregationType.Month.type) {
displayDateRange = formatUnixTimeToGregorianLikeShortYearMonth(dateRange.minUnixTime);
displayDateRange = formatDateTimeToGregorianLikeShortYearMonth(minDateTime);
} else if (props.dateAggregationType === ChartDateAggregationType.Day.type && props.chartMode === 'daily') {
displayDateRange = formatUnixTimeToShortDate(dateRange.minUnixTime);
displayDateRange = formatDateTimeToShortDate(minDateTime);
}
const dataItems = allDateRangeItemsMap[dateRangeKey] || [];