mirror of
https://github.com/mayswind/ezbookkeeping.git
synced 2026-05-18 16:54:25 +08:00
pasting date time from clipboard supports current language date time format
This commit is contained in:
@@ -88,6 +88,7 @@ import { type TimePickerValue, useDateTimeSelectionBase } from '@/components/bas
|
|||||||
import { ThemeType } from '@/core/theme.ts';
|
import { ThemeType } from '@/core/theme.ts';
|
||||||
import { NumeralSystem } from '@/core/numeral.ts';
|
import { NumeralSystem } from '@/core/numeral.ts';
|
||||||
import {
|
import {
|
||||||
|
type DateTime,
|
||||||
MeridiemIndicator,
|
MeridiemIndicator,
|
||||||
KnownDateTimeFormat
|
KnownDateTimeFormat
|
||||||
} from '@/core/datetime.ts';
|
} from '@/core/datetime.ts';
|
||||||
@@ -121,6 +122,8 @@ const theme = useTheme();
|
|||||||
const {
|
const {
|
||||||
tt,
|
tt,
|
||||||
getCurrentNumeralSystemType,
|
getCurrentNumeralSystemType,
|
||||||
|
parseDateTimeFromLongDateTime,
|
||||||
|
parseDateTimeFromShortDateTime,
|
||||||
formatUnixTimeToLongDateTime
|
formatUnixTimeToLongDateTime
|
||||||
} = useI18n();
|
} = useI18n();
|
||||||
|
|
||||||
@@ -233,21 +236,42 @@ function onPaste(event: ClipboardEvent): void {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const text = event.clipboardData.getData('Text');
|
let text = event.clipboardData.getData('Text');
|
||||||
|
|
||||||
if (!text) {
|
if (!text) {
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const formats = KnownDateTimeFormat.detect(text);
|
text = text.trim();
|
||||||
|
|
||||||
if (!formats || formats.length !== 1) {
|
const formats = KnownDateTimeFormat.detect(text);
|
||||||
event.preventDefault();
|
let dt: DateTime | undefined = undefined;
|
||||||
|
|
||||||
|
if (formats && formats.length === 1) {
|
||||||
|
dt = parseDateTimeFromKnownDateTimeFormat(text, formats[0] as KnownDateTimeFormat);
|
||||||
|
|
||||||
|
if (dt) {
|
||||||
|
dateTime.value = getLocalDatetimeFromUnixTime(getDummyUnixTimeForLocalUsage(dt.getUnixTime(), getTimezoneOffsetMinutes(), getBrowserTimezoneOffsetMinutes()));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
dt = parseDateTimeFromLongDateTime(text);
|
||||||
|
|
||||||
|
if (dt) {
|
||||||
|
dateTime.value = getLocalDatetimeFromUnixTime(getDummyUnixTimeForLocalUsage(dt.getUnixTime(), getTimezoneOffsetMinutes(), getBrowserTimezoneOffsetMinutes()));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
dateTime.value = getLocalDatetimeFromUnixTime(getDummyUnixTimeForLocalUsage(parseDateTimeFromKnownDateTimeFormat(text, formats[0] as KnownDateTimeFormat).getUnixTime(), getTimezoneOffsetMinutes(), getBrowserTimezoneOffsetMinutes()));
|
dt = parseDateTimeFromShortDateTime(text);
|
||||||
|
|
||||||
|
if (dt) {
|
||||||
|
dateTime.value = getLocalDatetimeFromUnixTime(getDummyUnixTimeForLocalUsage(dt.getUnixTime(), getTimezoneOffsetMinutes(), getBrowserTimezoneOffsetMinutes()));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
event.preventDefault();
|
||||||
}
|
}
|
||||||
|
|
||||||
function onFocused(input: VAutocomplete | null | undefined, focused: boolean): void {
|
function onFocused(input: VAutocomplete | null | undefined, focused: boolean): void {
|
||||||
|
|||||||
+18
-2
@@ -558,8 +558,24 @@ export function parseDateTimeFromUnixTime(unixTime: number, utcOffset?: number,
|
|||||||
return MomentDateTime.of(moment.unix(unixTime));
|
return MomentDateTime.of(moment.unix(unixTime));
|
||||||
}
|
}
|
||||||
|
|
||||||
export function parseDateTimeFromKnownDateTimeFormat(dateTime: string, format: KnownDateTimeFormat): DateTime {
|
export function parseDateTimeFromKnownDateTimeFormat(dateTime: string, format: KnownDateTimeFormat): DateTime | undefined {
|
||||||
return MomentDateTime.of(moment(dateTime, format.format));
|
const m = moment(dateTime, format.format);
|
||||||
|
|
||||||
|
if (!m.isValid()) {
|
||||||
|
return undefined;
|
||||||
|
}
|
||||||
|
|
||||||
|
return MomentDateTime.of(m);
|
||||||
|
}
|
||||||
|
|
||||||
|
export function parseDateTimeFromString(dateTime: string, format: string): DateTime | undefined {
|
||||||
|
const m = moment(dateTime, format);
|
||||||
|
|
||||||
|
if (!m.isValid()) {
|
||||||
|
return undefined;
|
||||||
|
}
|
||||||
|
|
||||||
|
return MomentDateTime.of(m);
|
||||||
}
|
}
|
||||||
|
|
||||||
export function formatUnixTime(unixTime: number, format: string, options: DateTimeFormatOptions, utcOffset?: number, currentUtcOffset?: number): string {
|
export function formatUnixTime(unixTime: number, format: string, options: DateTimeFormatOptions, utcOffset?: number, currentUtcOffset?: number): string {
|
||||||
|
|||||||
@@ -188,6 +188,7 @@ import {
|
|||||||
getCurrentUnixTime,
|
getCurrentUnixTime,
|
||||||
getYearMonthDayDateTime,
|
getYearMonthDayDateTime,
|
||||||
parseDateTimeFromUnixTime,
|
parseDateTimeFromUnixTime,
|
||||||
|
parseDateTimeFromString,
|
||||||
getGregorianCalendarYearMonthDays,
|
getGregorianCalendarYearMonthDays,
|
||||||
getDateTimeFormatType,
|
getDateTimeFormatType,
|
||||||
getFiscalYearTimeRangeFromUnixTime,
|
getFiscalYearTimeRangeFromUnixTime,
|
||||||
@@ -2361,6 +2362,8 @@ export function useI18n() {
|
|||||||
getCalendarDisplayShortMonthFromUnixTime: (unixTime: number, numeralSystem?: NumeralSystem, utcOffset?: number, currentUtcOffset?: number) => formatUnixTime(unixTime, 'MMM', getDateTimeFormatOptions({ calendarType: getCurrentCalendarDisplayType().primaryCalendarType, numeralSystem: numeralSystem }), utcOffset, currentUtcOffset),
|
getCalendarDisplayShortMonthFromUnixTime: (unixTime: number, numeralSystem?: NumeralSystem, utcOffset?: number, currentUtcOffset?: number) => formatUnixTime(unixTime, 'MMM', getDateTimeFormatOptions({ calendarType: getCurrentCalendarDisplayType().primaryCalendarType, numeralSystem: numeralSystem }), utcOffset, currentUtcOffset),
|
||||||
getCalendarDisplayDayOfMonthFromUnixTime: (unixTime: number, numeralSystem?: NumeralSystem, utcOffset?: number, currentUtcOffset?: number) => formatUnixTime(unixTime, getLocalizedShortDayFormat(), getDateTimeFormatOptions({ calendarType: getCurrentCalendarDisplayType().primaryCalendarType, numeralSystem: numeralSystem }), utcOffset, currentUtcOffset),
|
getCalendarDisplayDayOfMonthFromUnixTime: (unixTime: number, numeralSystem?: NumeralSystem, utcOffset?: number, currentUtcOffset?: number) => formatUnixTime(unixTime, getLocalizedShortDayFormat(), getDateTimeFormatOptions({ calendarType: getCurrentCalendarDisplayType().primaryCalendarType, numeralSystem: numeralSystem }), utcOffset, currentUtcOffset),
|
||||||
// format date time (by date display type) functions
|
// format date time (by date display type) functions
|
||||||
|
parseDateTimeFromLongDateTime: (dateTime: string) => parseDateTimeFromString(dateTime, getLocalizedLongDateFormat() + ' ' + getLocalizedLongTimeFormat()),
|
||||||
|
parseDateTimeFromShortDateTime: (dateTime: string) => parseDateTimeFromString(dateTime, getLocalizedShortDateFormat() + ' ' + getLocalizedShortTimeFormat()),
|
||||||
formatUnixTimeToLongDateTime: (unixTime: number, utcOffset?: number, currentUtcOffset?: number) => formatUnixTime(unixTime, getLocalizedLongDateFormat() + ' ' + getLocalizedLongTimeFormat(), getDateTimeFormatOptions(), utcOffset, currentUtcOffset),
|
formatUnixTimeToLongDateTime: (unixTime: number, utcOffset?: number, currentUtcOffset?: number) => formatUnixTime(unixTime, getLocalizedLongDateFormat() + ' ' + getLocalizedLongTimeFormat(), getDateTimeFormatOptions(), utcOffset, currentUtcOffset),
|
||||||
formatUnixTimeToShortDateTime: (unixTime: number, utcOffset?: number, currentUtcOffset?: number) => formatUnixTime(unixTime, getLocalizedShortDateFormat() + ' ' + getLocalizedShortTimeFormat(), getDateTimeFormatOptions(), utcOffset, currentUtcOffset),
|
formatUnixTimeToShortDateTime: (unixTime: number, utcOffset?: number, currentUtcOffset?: number) => formatUnixTime(unixTime, getLocalizedShortDateFormat() + ' ' + getLocalizedShortTimeFormat(), getDateTimeFormatOptions(), utcOffset, currentUtcOffset),
|
||||||
formatUnixTimeToLongDate: (unixTime: number, utcOffset?: number, currentUtcOffset?: number) => formatUnixTime(unixTime, getLocalizedLongDateFormat(), getDateTimeFormatOptions(), utcOffset, currentUtcOffset),
|
formatUnixTimeToLongDate: (unixTime: number, utcOffset?: number, currentUtcOffset?: number) => formatUnixTime(unixTime, getLocalizedLongDateFormat(), getDateTimeFormatOptions(), utcOffset, currentUtcOffset),
|
||||||
|
|||||||
Reference in New Issue
Block a user