6

我是Date-FNS的新手,我需要让这个示例在 VueJS 中工作:

import { format, formatDistance, formatRelative, subDays } from 'date-fns'

format(new Date(), '[Today is a] dddd')
//=> "Today is a Wednesday"

formatDistance(subDays(new Date(), 3), new Date())
//=> "3 days ago"

formatRelative(subDays(new Date(), 3), new Date())
//=> "last Friday at 7:26 p.m."

如何让它工作?

4

4 回答 4

17

就像 moment js 一样,您只需使用日期库将其导入并包含在您的数据中即可:

import { format, formatDistance, formatRelative, subDays } from 'date-fns'

export default {
  data () {
    return {
      format,
    }
  }
}

现在在您的模板中,您可以format用作:

<template>
 <p> Today's date is: {{ format(new Date(), 'dddd')  }} </p>
</template>

使用语言环境:

我没有尝试过语言环境,但它似乎非常简单。根据手册,我认为这应该可行。

import { format, formatDistance, formatRelative, subDays } from 'date-fns'
import es from 'date-fns/locale/es'
window.locale = 'es'

export default {
  data () {
    return {
      format,
    }
  },

  methods: {
    getFormat () {
      return this.format(new Date(), 'dddd', {locale: window.locale})
    } 
  }
}

现在在您的模板中,您可以format用作:

<template>
 <p> Today's date is: {{ getFormat() }} </p>
</template>

我认为,如果您花几分钟时间,您可以获得更好的工作解决方案。

于 2018-03-29T18:58:58.303 回答
4

使用延迟加载方法进行更新

如果您需要支持许多语言环境并希望注意捆绑包的大小,则此选项非常有用。

let dateFnsLocale
if (lang === 'en') { dateFnsLocale = await import('date-fns/locale/en-US') }
if (lang === 'hu') { dateFnsLocale = await import('date-fns/locale/hu') }
if (lang === 'fr') { dateFnsLocale = await import('date-fns/locale/fr') }

我没有动态连接lang到导入字符串的原因是因为我发现在这种情况下,Webpack 将无法决定您将导入哪些语言环境,并且它需要全部。

就我个人而言,我已经开始存储dateFnsLocalein Vuex,所以一旦你的导入完成,你可以提交它来声明,如果你愿意,它可以在整个应用程序中访问,就像 do 的全局命名空间window一样。

原始答案

如果您需要支持多个语言环境,我认为最好在您的main.js.

import { default as en } from 'date-fns/locale/en'
import { default as hu } from 'date-fns/locale/hu'
import { default as fr } from 'date-fns/locale/fr'

window.dateFnsLocales = {
  hu,
  fr,
  en
}

然后,您script可以在标签中的任何位置:

format(new Date(), 'dddd', {locale: window.dateFnsLocales[CURRENTLY SELECTED LOCALE]})
于 2018-10-22T17:39:42.817 回答
2

在date- fns v1.30.1版本中,您必须从date-fns/something.

为了使它与 Vuejs 一起工作:

import format from "date-fns/format"
import distanceInWords from "date-fns/distance_in_words"
import subDays from "date-fns/sub_days"

export default {
  name: "MyComponent",
  computed: {
    inWords () { return distanceInWords(subDays(new Date(), 3), new Date()) },
    today () { return format(new Date(), '[Today is a] dddd') },
  },
}

和模板标签:

<template>
  <div>
    <p>{{ inWords }}</p>
    <p>{{ today }}</p>
  </div>
</template>
于 2019-01-08T21:29:34.357 回答
-2

刚刚开始工作:

在您的模板中:

{{ formatDate() }}

进口:

import format from 'date-fns/format'
export default {
...

在您的方法中:

    methods: {
      formatDate: function () {
        return format(new Date(), '[Today is a] dddd')
      },
于 2018-03-29T19:37:01.747 回答