如何在 VueJS 中使用 Date-FNS?

Posted

技术标签:

【中文标题】如何在 VueJS 中使用 Date-FNS?【英文标题】:How to use Date-FNS in VueJS? 【发布时间】:2018-09-08 18:24:52 【问题描述】:

我是 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."

如何让它工作?

【问题讨论】:

不工作怎么办? 我是 JS 和 VueJS 的新手,我需要把代码放在哪里? 放什么代码?你看,你不说你想要什么。据我们所知,你不需要在任何地方放任何代码...... 【参考方案1】:

使用延迟加载方法更新

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

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 将无法决定您将导入哪些语言环境,并且需要全部。

就我个人而言,我已经开始将dateFnsLocale 存储在Vuex 中,因此一旦导入完成,您可以根据需要将其提交到状态,使其在整个应用程序中都可以访问,类似于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])

【讨论】:

【参考方案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>

【讨论】:

【参考方案3】:

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

使用区域设置:

我没有尝试过语言环境,但它看起来很简单。根据manual,我认为这应该可行。

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>

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

【讨论】:

谢谢@samayo,你能告诉我如何添加 locale 功能吗? date-fns.org/v1.29.0/docs/I18n我要改成es 好吧,我还没有测试过,但我试了一下。它现在应该可以工作了,请参阅更新 那么我需要每次在每个组件中导入语言环境吗? @rochasdv 我不知道,我相信有更好的方法可以做到这一点。我对图书馆的了解并不多于我回答的内容。【参考方案4】:

刚刚开始工作:

在您的模板中:

 formatDate() 

进口:

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

在你的方法中:

    methods: 
      formatDate: function () 
        return format(new Date(), '[Today is a] dddd')
      ,

【讨论】:

以上是关于如何在 VueJS 中使用 Date-FNS?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Vue 3 项目中显示使用 date-fns 格式的 Firestore 时间戳字段?

如何使用 date-fns 格式化日期?

如何使用 JavaScript date-fns 库在特定时区格式化日期/时间

使用 date-fns 2.x 版时,如何将日期时间格式化为 am/pm,不带句点?

在 date-fns 中获取主名月份名称

UTC时刻,date-fns有类似的东西吗?