Integrate time until visually
This commit is contained in:
27
src/App.vue
27
src/App.vue
@@ -1,30 +1,7 @@
|
|||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import HelloWorld from './components/HelloWorld.vue'
|
import ResponsiveTimeUntil from "./components/ResponsiveTimeUntil.vue"
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<div>
|
<ResponsiveTimeUntil />
|
||||||
<a href="https://vitejs.dev" target="_blank">
|
|
||||||
<img src="/vite.svg" class="logo" alt="Vite logo" />
|
|
||||||
</a>
|
|
||||||
<a href="https://vuejs.org/" target="_blank">
|
|
||||||
<img src="./assets/vue.svg" class="logo vue" alt="Vue logo" />
|
|
||||||
</a>
|
|
||||||
</div>
|
|
||||||
<HelloWorld msg="Vite + Vue" />
|
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<style scoped>
|
|
||||||
.logo {
|
|
||||||
height: 6em;
|
|
||||||
padding: 1.5em;
|
|
||||||
will-change: filter;
|
|
||||||
transition: filter 300ms;
|
|
||||||
}
|
|
||||||
.logo:hover {
|
|
||||||
filter: drop-shadow(0 0 2em #646cffaa);
|
|
||||||
}
|
|
||||||
.logo.vue:hover {
|
|
||||||
filter: drop-shadow(0 0 2em #42b883aa);
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
|
|||||||
@@ -1,38 +0,0 @@
|
|||||||
<script setup lang="ts">
|
|
||||||
import { ref } from 'vue'
|
|
||||||
|
|
||||||
defineProps<{ msg: string }>()
|
|
||||||
|
|
||||||
const count = ref(0)
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<template>
|
|
||||||
<h1>{{ msg }}</h1>
|
|
||||||
|
|
||||||
<div class="card">
|
|
||||||
<button type="button" @click="count++">count is {{ count }}</button>
|
|
||||||
<p>
|
|
||||||
Edit
|
|
||||||
<code>components/HelloWorld.vue</code> to test HMR
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
Check out
|
|
||||||
<a href="https://vuejs.org/guide/quick-start.html#local" target="_blank"
|
|
||||||
>create-vue</a
|
|
||||||
>, the official Vue + Vite starter
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
Install
|
|
||||||
<a href="https://github.com/johnsoncodehk/volar" target="_blank">Volar</a>
|
|
||||||
in your IDE for a better DX
|
|
||||||
</p>
|
|
||||||
<p class="read-the-docs">Click on the Vite and Vue logos to learn more</p>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<style scoped>
|
|
||||||
.read-the-docs {
|
|
||||||
color: #888;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
40
src/components/ResponsiveTimeUntil.vue
Normal file
40
src/components/ResponsiveTimeUntil.vue
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
<script setup lang="ts">
|
||||||
|
import { onUnmounted, ref } from "vue"
|
||||||
|
import { timeUntil } from "../services/time-until"
|
||||||
|
|
||||||
|
const timeUntilTarget = timeUntil("2024-03-13T09:00:00.000Z")
|
||||||
|
|
||||||
|
const yearsUntil = ref(timeUntilTarget.years)
|
||||||
|
const monthsUntil = ref(timeUntilTarget.months)
|
||||||
|
const daysUntil = ref(timeUntilTarget.days)
|
||||||
|
const hoursUntil = ref(timeUntilTarget.hours)
|
||||||
|
const secondsUntil = ref(timeUntilTarget.seconds)
|
||||||
|
|
||||||
|
const id = setInterval(() => {
|
||||||
|
const timeUntilTarget = timeUntil("2024-03-13T09:00:00.000Z")
|
||||||
|
|
||||||
|
yearsUntil.value = timeUntilTarget.years
|
||||||
|
monthsUntil.value = timeUntilTarget.months
|
||||||
|
daysUntil.value = timeUntilTarget.days
|
||||||
|
hoursUntil.value = timeUntilTarget.hours
|
||||||
|
secondsUntil.value = timeUntilTarget.seconds
|
||||||
|
}, 1000)
|
||||||
|
|
||||||
|
onUnmounted(() => clearInterval(id))
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<section>
|
||||||
|
<div>{{ yearsUntil }} years</div>
|
||||||
|
<div>{{ monthsUntil }} months</div>
|
||||||
|
<div>{{ daysUntil }} days</div>
|
||||||
|
<div>{{ hoursUntil }} hours</div>
|
||||||
|
<div>{{ secondsUntil }} seconds</div>
|
||||||
|
</section>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<style scoped>
|
||||||
|
section {
|
||||||
|
display: flex;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
import { DateTime } from "luxon"
|
import { DateTime } from "luxon"
|
||||||
|
|
||||||
interface TimeUntilReturn {
|
export interface TimeUntilReturn {
|
||||||
years: number
|
years: number
|
||||||
months: number
|
months: number
|
||||||
days: number
|
days: number
|
||||||
|
|||||||
Reference in New Issue
Block a user