Moment.jsとVuejs


127

次のようにして日付時刻を印刷してみます vue-for

{{ moment().format('MMMM Do YYYY, h:mm:ss a') }}

ただし、表示されません。それはただの空白です。Vueでモーメントを使用する方法を教えてください。

回答:


228

あなたのコードでは、vue.jsmoment()そのスコープからメソッドにアクセスしようとしています。

したがって、次のような方法を使用する必要があります。

methods: {
  moment: function () {
    return moment();
  }
},

に日付を渡したい場合はmoment.js、フィルターを使用することをお勧めします。

filters: {
  moment: function (date) {
    return moment(date).format('MMMM Do YYYY, h:mm:ss a');
  }
}

<span>{{ date | moment }}</span>

[デモ]


7
es6を使用する場合は、忘れないでください-「瞬間」から瞬間をインポートします。
patie 2016

2
Vue 2+ではフィルターが無効になっています。代わりに、計算されたプロパティを使用する必要があります。この質問に対する私の答えを見てください。
パヴェルGościcki

Vue v2の場合、グローバルフィルターvuejs.org/v2/api/#Vue-filterを
JaroslavKlimčíkNov

コンポーネントで機能する明確な回答。尊敬。
joshfindit 2018

@PawełGościckiVue2でフィルターが機能しないことを確信していますか?なぜなら私にとってはそうです
デイブ・ハウソン'11 / 11/19

145

プロジェクトが単一ページアプリケーションの場合(例:によって作成されたプロジェクトvue init webpack myproject)、この方法が最も直感的でシンプルであることがわかりました。

ではmain.js

import moment from 'moment'

Vue.prototype.moment = moment

次に、テンプレートで単純に使用します

<span>{{moment(date).format('YYYY-MM-DD')}}</span>

SPA以外のアプリケーションタイプでも機能するはずです。
iAmcR

私はこのモーメントを使う方法が本当に好きです。共有してくれてありがとう!私はそれを実装しましたが、ドキュメントで提案されているように、Vue.prototype。$ moment = momentに小さな変更を加えました。vuejs.org/v2/cookbook/adding-instance-properties.html
Josh

単純ですが、VSコードで型認識を行うことはできません。
Alvin Konda

28

セクションにあなたの瞬間を追加package.jsonしてください"dependencies"

"dependencies": {
  "moment": "^2.15.2",
  ...
}

モーメントを使用するコンポーネントで、インポートします。

<script>
import moment from 'moment'
...

そして、同じコンポーネントに計算されたプロパティを追加します:

computed: {
  timestamp: function () {
    return moment(this.<model>.attributes['created-at']).format('YYYY-MM-DD [at] hh:mm')
  }
}

そして、このコンポーネントのテンプレートで:

<p>{{ timestamp }}</p>

1
パラメータのない関数を使用する代わりに、次のような関数を使用したい場合は注意してください。を使用する date2day: function (date) {return moment(date).format('dddd')} ことはできません。代わりにcomputed使用する必要がありますmethods
andresgottlieb 2017

12

私はそれを単一のファイルコンポーネントでVue 2.0で動作させました。

npm install moment Vueがインストールされているフォルダー

<template>
  <div v-for="meta in order.meta">
    {{ getHumanDate(meta.value.date) }}
  </div>
</template>
<script>
    import moment from 'moment';
    export default {
         methods: {
            getHumanDate : function (date) {
                return moment(date, 'YYYY-MM-DD').format('DD/MM/YYYY');
            }
        }
    }
</script>

なぜメソッドなのか、なぜ計算しないのか?
Serhii Matrunchyk 2017年

表示にはメソッドを使用しました。計算されたプロパティを自由に使用してください。
最大

4

以下は、Vueのサードパーティラッパーライブラリを使用した例です。 vue-momentです。

MomentインスタンスをVueのルートスコープにバインドすることに加えて、このライブラリにはmomentdurationフィルターが含まれています。

この例にはローカリゼーションが含まれており、NodeJSのCommonJSモジュールシステムが必要とする代わりに、ES6モジュールインポート(公式標準)を使用しています。

import Vue from 'vue';

import moment from 'moment';
import VueMoment from 'vue-moment';

// Load Locales ('en' comes loaded by default)
require('moment/locale/es');

// Choose Locale
moment.locale('es');

Vue.use(VueMoment, { moment });

これで、追加のマークアップなしで、MomentインスタンスをVueテンプレートで直接使用できます。

<small>Copyright {{ $moment().year() }}</small>

またはフィルター:

<span>{{ 3600000 | duration('humanize') }}</span>
<!-- "an hour" -->
<span>{{ [2, 'years'] | duration('add', 1, 'year') | duration('humanize') }}</span>
<!-- "3 years" -->

2
参考までに:この回答は、その長さと内容のため、低品質としてフラグが付けられました。これがOPの質問にどのように答えるかを説明することによって、それを改善したい場合があります。
oguz ismail

3
// plugins/moment.js

import moment from 'moment';

moment.locale('ru');

export default function install (Vue) {
  Object.defineProperties(Vue.prototype, {
    $moment: {
      get () {
        return moment;
      }
    }
  })
}

// main.js

import moment from './plugins/moment.js';
Vue.use(moment);

// use this.$moment in your components

プラグインをうまく使用して、モーメントに関連するものを別のファイルに分離します。よく働く!
ペドロ

0

単にモーメントモジュールをインポートしてから、計算された関数を使用して私のmoment()ロジックを処理し、テンプレートで参照されている値を返します。

私はこれを使用していないため、その効果について話すことはできませんが、別の考慮事項としてhttps://github.com/brockpetrie/vue-momentを見つけました


0

瞬間

vueプロジェクト用の非常に優れたプラグインであり、コンポーネントや既存のコードと非常にスムーズに連携します。瞬間をお楽しみください...😍

// in your main.js
Vue.use(require('vue-moment'));
// and use in component
{{'2019-10-03 14:02:22' | moment("calendar")}}
// or like this
{{created_at | moment("calendar")}}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.