JS:使用date-fns解析时间以拉出小时和分钟,点燃时区

时间:2019-12-15 16:22:17

标签: javascript date-fns

我的后端向我发送了以下格式的时间戳:2019-12-15T20:00:00.000Z,它是UTC时间。现在,我所需要的只是拉出时间,而无需修改时区。我正在使用date-fns,但是每次尝试获取时间时,我都会得到Invalid Date或将时间修改为本地时区。现在我的代码是:

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

format(parseISO('2019-12-15T20:00:00.000Z'), 'h:mm a')

我想要的是: 8:00 PM ,但是我得到的是 3:00 PM ,因为它是从UTC转换为EST时间(我的本地时区)。我知道我可以做类似IsoString的事情,然后解析字符串,但是我正在寻找一种使用date-fns做到这一点的方法,因此我不必编写自定义字符串解析器。必须有一种简单的方法来忽略时区吗?

2 个答案:

答案 0 :(得分:1)

这是一种使用香草JS Date对象手动设置字符串格式的解决方案:


const date = new Date('2019-12-15T20:00:00.000Z');

function format(date) {
  const hours = date.getUTCHours();
  const minutes = date.getMinutes();

  return (1 + ((hours - 1) % 12)) + ":" + minutes.toString().padStart(2, "0") + " " + ((hours > 11) ? "PM" : "AM");
}

format(date);

答案 1 :(得分:0)

我将在如何帮助某人的情况下回答我自己的问题,但我仍在寻找是否仅使用date-fns会有更好的选择,因为我的似乎有点骇人听闻:< / p>

我要做的是从ISO字符串中删除时区,然后将其与date-fns一起使用:

let time = "2019-12-15T20:00:00.000Z".slice(0, -5)

以上是没有时区的时间,并且由于没有时区,因此date-fns假定为本地时区,所以当您这样做时:

format(parseISO(time), 'h:mm a')

您将获得: 8:00 PM ,或您喜欢的任何格式。您只需要注意要切片的字符串。如果其格式始终相同,则应该可以使用。