ChatGPT解决这个技术问题 Extra ChatGPT

Moment.js 与 Vuejs

我尝试在 vue-for 中使用如下方式打印日期时间

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

但是,它没有出现。这只是一个空白。我如何尝试在 vue 中使用时刻?


P
Pantelis Peslis

使用您的代码,vue.js 正在尝试从其范围访问 moment() 方法。

因此,您应该使用这样的方法:

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>

[demo]


如果使用 es6,不要忘记 - 从“时刻”导入时刻;
过滤器在 Vue 2+ 中被禁用。您应该改用计算属性。请参阅我对这个问题的回答。
对于 Vue v2,您可以使用全局过滤器 vuejs.org/v2/api/#Vue-filter
适用于组件的快速清晰答案。尊重。
过滤器在 Vue 3 中已被弃用。我使用这种方法已经有一段时间了,现在正在努力替换相当多的代码,以准备更新到 Vue 3。v3.vuejs.org/guide/migration/filters.html#overview
k
kissu

如果您的项目是单页应用程序(例如 vue init webpack myproject 创建的项目),我发现这种方式最直观和简单:

在 main.js

import moment from 'moment'

Vue.prototype.moment = moment

然后在您的模板中,只需使用

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

除了 SPA 之外,还应该适用于其他应用程序类型。
我真的很喜欢这种使用 Moment 的方法。感谢分享!我刚刚实现了它,但是按照文档 Vue.prototype.$moment = moment. vuejs.org/v2/cookbook/adding-instance-properties.html
很简单,但你不能在 VS 代码中进行类型识别。
这对我有用。我在我的 Laravel 应用程序中使用 Laravel mix 和 Vue 2.6.12。谢谢@耿嘉文
k
kissu

"dependencies" 部分的 package.json 中添加时刻:

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

在要使用 moment 的组件中,将其导入:

<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>

值得注意的是,如果您不想使用无参数函数,而是想使用类似以下的函数:date2day: function (date) {return moment(date).format('dddd')} 您不能使用 computed,而应该使用 methods
k
kissu

我使它在单个文件组件中与 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>

为什么是方法,为什么不计算?
出于显示目的,我使用了方法。随意使用计算属性。
u
ux.engineer

下面是一个使用名为 vue-moment 的 Vue 的第 3 方包装库的示例。

除了将 Moment 实例绑定到 Vue 的根范围之外,此库还包括 momentduration 过滤器。

此示例包括本地化,并使用官方标准 ES6 模块导入,而不是 NodeJS 的 CommonJS 模块系统要求。

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 });

现在你可以直接在你的 Vue 模板中使用 Moment 实例,而无需任何额外的标记:

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

或过滤器:

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

仅供参考:此答案因其长度和内容而被标记为低质量。您可能想通过解释这如何回答 OP 的问题来改进它。
P
Pedro
// 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

很好地使用插件将与时刻相关的东西隔离在一个单独的文件中。效果很好!
J
Jiro Matchonson

对于 Vue 3 中的 moment.js

npm install moment --save

然后在任何组件中

import moment from 'moment'

...

export default {
  created: function () {
    this.moment = moment;
  },

...

<div class="comment-line">
   {{moment(new Date()).format('DD.MM.YYYY [&nbsp;] HH:mm')}}
</div>

只需使用 computed: { moment: () => moment }。看我的回答。
M
Muhammad Shahzad

Moment.js 与 Vue3 js

npm install moment --save   # npm
yarn add moment             # yarn

Main.ts

import { createApp } from 'vue'
import App from './App.vue'
import router from './router'

import moment from 'moment'

const app = createApp(App)

app.config.globalProperties.$moment = moment

app.use(router).mount('#app')

vue3 js组件中使用的时刻

{{ $moment(item.created_at).format("YYYY-MM-DD") }}  // 2021-07-03

t
tao

默认情况下,global 成员在您的 <template> 范围内不可用。但是您可以使用 computed 属性轻松地传递它们。

computed: {
  moment: () => moment,
  console: () => console,
  window: () => window
}

现在您可以在模板中使用它们中的任何一个。即:console.log(moment(), window)

请注意,这不会增加任何开销。


k
kissu

vue-moment

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")}}

C
CodeFromthe510

我只需导入 moment 模块,然后使用计算函数来处理我的 moment() 逻辑并返回模板中引用的值。

虽然我没有使用过它,因此无法谈论它的有效性,但我确实找到了 https://github.com/brockpetrie/vue-moment 作为替代考虑


N
Non404

经过测试

import Vue from 'vue'
    
Vue.filter('formatYear', (value) => {
  if (!value) return ''
  return moment(value).format('YYYY')
})