fix: date number
Some checks failed
Test / build (lts/*, ubuntu-latest) (push) Has been cancelled
Test / build (lts/*, windows-latest) (push) Has been cancelled

This commit is contained in:
Dustella 2025-03-20 16:33:36 +08:00
parent 0909d5a32c
commit 7b6e55e67a
Signed by: Dustella
GPG Key ID: 35AA0AA3DC402D5C
3 changed files with 86 additions and 6 deletions

1
.gitignore vendored
View File

@ -7,3 +7,4 @@ dist-ssr
node_modules
.idea/
*.log
*.7z

View File

@ -8,20 +8,71 @@
</route>
<script setup lang="ts">
import {
CalendarDate,
createCalendar,
DateFormatter,
type DateValue,
getLocalTimeZone,
toCalendar,
} from '@internationalized/date'
import DenseFramework from '~/components/DenseFramework.vue'
import { cn } from '~/lib/utils'
const selectedT = ref<'5' | '10' | '16'>('5')
const selectedH = ref(50)
const selectedRange = ref('-30')
const selectedYear = ref('2008')
const ranges = ['-30', '-60', '30', '60']
const df = new DateFormatter('zh-CN', {
dateStyle: 'long',
})
const ca = createCalendar('zh-CN')
const targetDate = ref<DateValue>()
function getDayOfYear(date: Date) {
const start = new Date(date.getFullYear(), 0, 0)
// @ts-expect-error date - start
const diff = date - start
const oneDay = 1000 * 60 * 60 * 24
return Math.floor(diff / oneDay)
}
watch(selectedYear, () => {
targetDate.value = toCalendar(
new CalendarDate(Number.parseInt(selectedYear.value), 1, 1),
ca,
).add({ days: Math.floor(Number.parseInt(selectedT.value) * 1.5) })
})
const minDateValue = computed(() => {
const currentYearBeginDate = new CalendarDate(Number.parseInt(selectedYear.value), 1, 1)
return toCalendar(currentYearBeginDate, ca).add({ days: Math.floor(Number.parseInt(selectedT.value) * 1.5) })
})
const maxDateValue = computed(() => {
const currentYearBeginDate = new CalendarDate(Number.parseInt(selectedYear.value) + 1, 1, 1)
return toCalendar(currentYearBeginDate, ca).subtract({ days: Math.floor(Number.parseInt(selectedT.value) * 1.5) })
})
onMounted(() => {
targetDate.value = toCalendar(
new CalendarDate(Number.parseInt(selectedYear.value), 1, 1),
ca,
).add({ days: Math.floor(Number.parseInt(selectedT.value) * 1.5) })
})
const fetchUrl = computed(() => {
const query = new URLSearchParams()
if (!targetDate.value) {
return ''
}
const targetDay = getDayOfYear(targetDate.value.toDate(getLocalTimeZone()))
const startDay = targetDay - Math.floor(1.5 * Number.parseInt(selectedT.value))
query.set('T', selectedT.value)
query.set('target_h', selectedH.value.toString())
query.set('target_lat', selectedRange.value)
query.set('year', selectedYear.value)
query.set('start_day', startDay.toString())
return `/cosmic/render/planet_wave/perday?${query}`
})
</script>
@ -87,5 +138,33 @@ const fetchUrl = computed(() => {
</SelectGroup>
</SelectContent>
</Select>
<Label>日期</Label>
<Popover>
<PopoverTrigger as-child>
<Button
variant="outline"
:class="cn(
'w-full justify-start text-left font-normal',
!targetDate && 'text-muted-foreground',
)"
>
<span i-md-calendar />
{{ targetDate ? df.format(targetDate.toDate(getLocalTimeZone())) : "选择日期" }}
</Button>
</PopoverTrigger>
<PopoverContent class="w-auto p-0">
<!-- @ts-expect-error dsa -->
<Calendar
v-model="targetDate " initial-focus
:is-date-disabled="(date:DateValue) => date < minDateValue || date > maxDateValue"
:prevent-deselect="true"
/>
</PopoverContent>
</Popover>
<div>
拟合起始日期 {{ targetDate?.subtract({ days: Math.floor(1.5 * Number.parseInt(selectedT)) }) }}
<br>
拟合结束日期 {{ targetDate?.add({ days: Math.floor(1.5 * Number.parseInt(selectedT)) }) }}
</div>
</DenseFramework>
</template>

View File

@ -51,12 +51,12 @@ watch(() => selected.year, () => {
const minDateValue = computed(() => {
const currentYearBeginDate = new CalendarDate(Number.parseInt(selected.year), 1, 1)
return toCalendar(currentYearBeginDate, ca).add({ days: Number.parseInt(selected.T) * 1.5 })
return toCalendar(currentYearBeginDate, ca).add({ days: Math.floor(Number.parseInt(selected.T) * 1.5) })
})
const maxDateValue = computed(() => {
const currentYearBeginDate = new CalendarDate(Number.parseInt(selected.year) + 1, 1, 1)
return toCalendar(currentYearBeginDate, ca).subtract({ days: Number.parseInt(selected.T) * 1.5 })
return toCalendar(currentYearBeginDate, ca).subtract({ days: Math.floor(Number.parseInt(selected.T) * 1.5) })
})
const ranges = [
@ -70,7 +70,7 @@ onMounted(() => {
targetDate.value = toCalendar(
new CalendarDate(Number.parseInt(selected.year), 1, 1),
ca,
).add({ days: Number.parseInt(selected.T) * 1.5 })
).add({ days: Math.floor(Number.parseInt(selected.T) * 1.5) })
})
const queryUrl = computed(() => {
@ -79,7 +79,7 @@ const queryUrl = computed(() => {
return ''
}
const targetDay = getDayOfYear(targetDate.value.toDate(getLocalTimeZone()))
const startDay = targetDay - 1.5 * Number.parseInt(selected.T)
const startDay = targetDay - Math.floor(1.5 * Number.parseInt(selected.T))
q.set('year', selected.year)
q.set('T', selected.T.toString())
q.set('k', selected.k.toString())
@ -176,9 +176,9 @@ const queryUrl = computed(() => {
</PopoverContent>
</Popover>
<div>
拟合起始日期 {{ targetDate?.subtract({ days: 1.5 * Number.parseInt(selected.T) }) }}
拟合起始日期 {{ targetDate?.subtract({ days: Math.floor(1.5 * Number.parseInt(selected.T)) }) }}
<br>
拟合结束日期 {{ targetDate?.add({ days: (1.5 * Number.parseInt(selected.T)) }) }}
拟合结束日期 {{ targetDate?.add({ days: Math.floor(1.5 * Number.parseInt(selected.T)) }) }}
</div>
</DenseFramework>
</template>