首页 > 解决方案 > 在 date-fns 库中将 UTC 时间戳字符串转换为人类可读的格式

问题描述

我这里有一个 UTC 字符串。

2021-04-01T21:26:19Z

我想使用PPPdate-fns 中的格式将其转换为人类可读的格式

April 1st, 2021

我该怎么做呢?我似乎无法在 date-fns 中找到将 UTC 字符串转换为不同日期的函数

我的代码如下所示:

import { isValid, format, parse } from 'date-fns'
import { enGB } from 'date-fns/locale'

export const getReadableDate = (utcDate:string | undefined):string => {
  if (!utcDate) {
    return 'Invalid Date'
  }

  const parsedDate = parse(utcDate, 'PPP', new Date(), { locale: enGB })
  const isValidDate = isValid(parsedDate)
  if (isValidDate) {
    const messageDate = format(new Date(utcDate), 'PPP')
    return messageDate
  } else {
    return 'InvalidDate'
  }
}

标签: javascriptdatedate-fns

解决方案


您可以使用parseISO,它接受 UTC 时间戳并返回一个Date对象:

import { isValid, format, parseISO } from 'date-fns'

export const getReadableDate = (utcDate: string | undefined): string => {
  if (!utcDate) {
    return 'Invalid Date'
  }

  const parsedDate = parseISO(utcDate)
  const isValidDate = isValid(parsedDate)
  if (isValidDate) {
    // parsedDate is a `Date` object, so you can use it directly,
    // instead of `new Date(utcDate)`
    const messageDate = format(parsedDate, 'PPP')
    return messageDate
  } else {
    return 'InvalidDate'
  }
}

您也可以使用parse,但第二个参数应该是您要从中解析的格式,而不是您要显示的格式。在您的示例中,您应该在调用和调用时使用"yyyy-MM-dd'T'HH:mm:ss'Z'"(ISO 格式)。parse"PPP"format


推荐阅读