Vue.js - это простой в использовании фреймворк для веб-приложений, который мы можем использовать для разработки интерактивных интерфейсных приложений.

В этой статье мы рассмотрим некоторые компоненты времени Vue, которые сэкономят вам время при их создании с нуля.

vue-timeago

Компонент vue-timeago отлично подходит для отображения промежутка времени от текущего времени и времени, которое нам дано.

Мы можем установить его, запустив:

npm i vue-timeago

Тогда мы можем использовать его следующим образом:

main.js :

import Vue from "vue";
import App from "./App.vue";
import VueTimeago from "vue-timeago";
Vue.config.productionTip = false;
Vue.use(VueTimeago, {
  name: "Timeago",
  locale: "en",
  locales: {
    "zh-CN": require("date-fns/locale/zh_cn"),
    ja: require("date-fns/locale/ja")
  }
});
new Vue({
  render: h => h(App)
}).$mount("#app");

App.vue :

<template>
  <div id="#app">
    <timeago :datetime="time"></timeago>
    <br>
    <timeago :datetime="time" :auto-update="60"></timeago>
    <br>
    <timeago :datetime="time" locale="zh-CN"></timeago>
  </div>
</template>
<script>
export default {
  name: "App",
  data() {
    return {
      time: new Date(2019, 11, 31)
    };
  }
};
</script>

В main.js мы зарегистрировали компонент timeago глобально с различными языковыми стандартами и именем компонента.

Затем мы включили его, установив datetime, чтобы получить временной интервал от текущего в локали, установленной как значение параметра locale в main.js. В третьем случае мы устанавливаем locale на zh-CN, что является еще одной локалью, которую мы установили в опции locales в качестве альтернативных локалей.

vue-обратный отсчет

Полезный компонент для отображения времени обратного отсчета с учетом того промежутка времени, который мы прошли.

Мы можем установить его, запустив:

npm install @chenfengyuan/vue-countdown

Тогда мы можем использовать его следующим образом:

main.js :

import Vue from "vue";
import App from "./App.vue";
import VueCountdown from "@chenfengyuan/vue-countdown";
Vue.config.productionTip = false;
Vue.component(VueCountdown.name, VueCountdown);
new Vue({
  render: h => h(App)
}).$mount("#app");

App.vue :

<template>
  <div id="#app">
    <countdown :time="2 * 24 * 60 * 60 * 1000">
      <template
        slot-scope="props"
      >Time Remaining:{{ props.days }} days, {{ props.hours }} hours, {{ props.minutes }} minutes, {{ props.seconds }} seconds.</template>
    </countdown>
  </div>
</template>
<script>
export default {
  name: "App"
};
</script>

В приведенном выше коде мы передали значение свойства time как число. Затем мы можем получить дни, часы, минуты и секунды, вычисленные по обратному отсчету из свойств слота, и отобразить их в нашем App компоненте.

Другие реквизиты в auto-start, которые являются логическими, чтобы указать, хотим ли мы автоматически запускать обратный отсчет при инициализации.

emit-events указывает, хотим ли мы генерировать события. Это логическая опора

interval - это числовое значение, указывающее интервал в миллисекундах хода обратного отсчета. Он должен быть 0 или больше.

now - это функция для генерации текущего времени в миллисекундах в указанном часовом поясе.

tag - это элемент, в котором находится таймер обратного отсчета. Это строка.

transform принимает функцию преобразования выходных свойств перед рендерингом.

vue-момент-lib

Это библиотека Vue, которая предоставляет нам различные фильтры даты и времени для отображения даты и времени по-своему.

Для работы требуется moment.js, поэтому мы устанавливаем его, выполнив:

npm install --save moment vue-moment-lib

Тогда мы можем использовать его следующим образом:

main.js :

import Vue from "vue";
import App from "./App.vue";
import VueMomentLib from "vue-moment-lib";
Vue.config.productionTip = false;
Vue.use(VueMomentLib);
new Vue({
  render: h => h(App)
}).$mount("#app");

App.vue :

<template>
  <div id="#app">
    <span>{{ Date.now() | moment().format("YYYY") }}</span>
    <br>
    <span>{{ "11-14-2018" | time("MM-DD-YYYY").format("YYYY") }}</span>
    <br>
    <span>{{ 1318781876 | unix().utc() }}</span>
  </div>
</template>
<script>
export default {
  name: "App"
};
</script>

Приведенный выше код импортирует библиотеку в наше приложение, а затем мы можем использовать moment методы для форматирования даты по своему желанию.

В первом примере дата преобразуется в объект момента, а затем форматируется для отображения только года.

Второй берет строку и затем преобразует ее в год с помощью moment. time - это псевдоним для moment.

В третьем примере используется временная метка UNIX, затем возвращается дата-время в формате UTC и отображается.

Тогда мы должны увидеть:

2020
2018
Sun Oct 16 2011 16:17:56 GMT+0000

отображается на экране.

Как мы видим, для отображения дат так, как мы хотим, потребовалось совсем немного времени. Мы также можем использовать его в коде нашего компонента.

Например, мы можем использовать его следующим образом:

App.vue :

<template>
  <div id="#app">
    {{thisYear}}
    <br>
    {{unixUtc}}
    <br>
    {{utc}}
  </div>
</template>
<script>
export default {
  name: "App",
  computed: {
    thisYear() {
      return this.$time(new Date(2019, 0, 1)).format("YYYY");
    },
    unixUtc() {
      return this.$unix(1318781876).utc();
    },
    utc() {
      return this.$utc(Date.now()).format("LLLL");
    }
  }
};
</script>

Код обращается к vue-moment методам из this, поскольку мы импортировали его в main.js, как мы это делали в предыдущем примере. Затем мы вызываем методы так же, как и с шаблонными фильтрами.

Тогда мы должны увидеть:

2019
Sun Oct 16 2011 16:17:56 GMT+0000
Sunday, February 16, 2020 2:12 AM

отображается на экране.

Заключение

Существует множество библиотек для работы с датой и временем, которые помогают нам отображать время и управлять им так, как мы хотим. Все они очень настраиваемы, поэтому мы можем использовать их для отображения дат и промежутков времени, не вычисляя их самостоятельно.