LoginSignup
20
18

Nuxt.jsでVueコンポーネントでもVuexでもdate-fnsを使う

Last updated at Posted at 2018-11-07

はじめに

Nuxt.jsのvuexでMoment.jsを利用するを作成したあとに、Vue.jsのslackコミュに投げました。

そしたら、時代は、moment.jsではなくて、date-fnsということを教えていただきました。

そしたら同様にNuxt.jsで使いたいのでプラグインを作っていきます。

date-fnsの使い方

書式整形

日付の書式変更は、formatを使うらしい。
https://date-fns.org/v1.29.0/docs/format

以下のような感じで使います。

import format from 'date-fns/format'
import jaLocale from 'date-fns/locale/ja'
const result = format(
  new Date(2014, 6, 2),
  'YYYY/MM/DD HH:mm:ss',
  {locale: jaLocale}
)
//=> '2014/02/11 00:00:00'

Date型変換

日付の文字列などをDate型に変換する場合は、parseを使うらしい。
https://date-fns.org/v1.29.0/docs/parse

import parse from 'date-fns/parse'
// Convert string '2014-02-11T11:30:30' to date:
const result = parse('2014-02-11T11:30:30')
//=> Tue Feb 11 2014 11:30:30

Nuxt.jsに組み込む

Moment.jsのプラグインを作成したように、date-fnsのformatのプラグインを作成する

plugins/date_format.js
import format from 'date-fns/format'
import ja from 'date-fns/locale/ja'
import parse from 'date-fns/parse'

export default ({ app }, inject) => {
  inject('date_format', (date = new Date(), formatStr) => {
    return format(parse(date), formatStr, { locale: ja })
  })
}

組み込みます。

nuxt.config.js
module.exports = {
・・・
plugins: [
  '@/plugins/vuetify',
  '@/plugins/axios',
  '@/plugins/date_format' ーこれを追記
],
・・・
}

使い方

Vuex

store/posts.js
export const actions = {
  async publishPost({ commit }, { payload }) {
    const created_at = this.$date_format(new Date())
  }
}

Vueコンポーネント

  computed: {
    showPosts() {
      return this.posts.map(post => {
        const tmp = { ...post }
        tmp.created_at = this.$date_format(
          post.created_at,
          'YYYY/MM/DD HH:mm:ss'
        )
        return tmp
      })
    }
  }

ちなみに、サイズも41KiBほど小さくなりました。

Moment.js: 6421c4c6c45adabb8508.js    **419 KiB**       9  [emitted]  [big]  vendors.app
date_fns:   63ab1334cce23066f889.js    **378 KiB**       9  [emitted]  [big]  vendors.app

参考文献

20
18
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
20
18