diff --git a/src/components/mobile/DateTimeSelectionSheet.vue b/src/components/mobile/DateTimeSelectionSheet.vue index 5e688a01..7f372d24 100644 --- a/src/components/mobile/DateTimeSelectionSheet.vue +++ b/src/components/mobile/DateTimeSelectionSheet.vue @@ -4,37 +4,46 @@
- +
- - - - - -
+ +
+ + + + +
+
+
+
+
{{ displayTime }}
+ +
+
@@ -49,10 +58,13 @@ import { getCurrentUnixTime, getCurrentDateTime, getUnixTime, + getBrowserTimezoneOffsetMinutes, getLocalDatetimeFromUnixTime, + getActualUnixTimeForStore, + getTimezoneOffsetMinutes, getYear, getTimeValues, - setTimeValuesToDate + getCombinedDateAndTimeValues } from '@/lib/datetime.js'; import { createInlinePicker } from '@/lib/ui.mobile.js'; @@ -82,6 +94,7 @@ export default { const datetime = getLocalDatetimeFromUnixTime(value); return { + mode: 'time', yearRange: [ 2000, getYear(getCurrentDateTime()) + 1 @@ -103,6 +116,16 @@ export default { }, isYearFirst() { return this.$locale.isLongDateMonthAfterYear(this.userStore); + }, + displayTime() { + return this.$locale.formatUnixTimeToLongDateTime(this.userStore, getActualUnixTimeForStore(getUnixTime(this.dateTime), getTimezoneOffsetMinutes(), getBrowserTimezoneOffsetMinutes())); + }, + switchButtonTitle() { + if (this.mode === 'time') { + return this.$t('Date'); + } else { + return this.$t('Time'); + } } }, beforeUnmount() { @@ -114,6 +137,7 @@ export default { methods: { onSheetOpen() { const self = this; + self.mode = 'time'; if (self.modelValue) { self.dateTime = getLocalDatetimeFromUnixTime(self.modelValue); @@ -126,11 +150,13 @@ export default { self.getTimePickerColumns(), self.timeValues, { change(picker, values) { self.timeValues = values; - setTimeValuesToDate(self.dateTime, self.timeValues, self.is24Hour, self.isMeridiemIndicatorFirst); + self.dateTime = getCombinedDateAndTimeValues(self.dateTime, self.timeValues, self.is24Hour, self.isMeridiemIndicatorFirst); } }); } else { - self.timePickerHolder.setValue(self.timeValues); + self.$nextTick(() => { + self.timePickerHolder.setValue(self.timeValues); + }); } self.$refs.datetimepicker.switchView('calendar'); @@ -138,6 +164,13 @@ export default { onSheetClosed() { this.$emit('update:show', false); }, + switchMode() { + if (this.mode === 'time') { + this.mode = 'date'; + } else { + this.mode = 'time'; + } + }, setCurrentTime() { this.dateTime = getLocalDatetimeFromUnixTime(getCurrentUnixTime()); this.timeValues = this.getTimeValues(this.dateTime); diff --git a/src/lib/datetime.js b/src/lib/datetime.js index 65e5a71e..bdf5e444 100644 --- a/src/lib/datetime.js +++ b/src/lib/datetime.js @@ -461,7 +461,8 @@ export function getTimeValues(date, is24Hour, isMeridiemIndicatorFirst) { } } -export function setTimeValuesToDate(date, timeValues, is24Hour, isMeridiemIndicatorFirst) { +export function getCombinedDateAndTimeValues(date, timeValues, is24Hour, isMeridiemIndicatorFirst) { + let newDateTime = new Date(date.valueOf()); let hours = 0; let minutes = 0; let seconds = 0; @@ -494,9 +495,11 @@ export function setTimeValuesToDate(date, timeValues, is24Hour, isMeridiemIndica } } - date.setHours(hours); - date.setMinutes(minutes); - date.setSeconds(seconds); + newDateTime.setHours(hours); + newDateTime.setMinutes(minutes); + newDateTime.setSeconds(seconds); + + return newDateTime; } export function isDateRangeMatchFullYears(minTime, maxTime) {