javascript date-fns中的解析函数返回前一天的值

bhmjp9jg  于 2023-01-24  发布在  Java
关注(0)|答案(5)|浏览(202)

我尝试使用date-fns库解析日期,但是得到的结果是前一天。我怎样才能避免这种情况并得到正确的结果?

start = '2021-08-16'
const parseStart = parse(start, 'yyyy-MM-dd', new Date());

输出:

2021-08-15T18:30:00.000Z
gr8qqesn

gr8qqesn1#

我们在尝试使用date-fns格式函数处理一个连字符串日期时遇到了类似的问题,它在格式化时从日期中减去了一天,实际上解决办法是将hypes改为斜杠。

const dateString = '2010-08-03'
const date = new Date(dateString.replace(/-/g, '/'))
9bfwbjaz

9bfwbjaz2#

为了避免这个时区开销,我建议将日期字符串格式化为ISO字符串,然后使用date-fns的parseISO函数。
就像这样:

import { parseISO } from 'date-fns';

const parseStringDate = (dateString: string): Date => {
  const ISODate = new Date(dateString).toISOString();
  return parseISO(ISODate);
};

parseStringDate("2021-08-19") //2021-08-19T00:00:00.000Z
1tuwyuhd

1tuwyuhd3#

我在一个过滤器中使用,所以初始值是“-”,我不得不替换它使用“/”以及,它的工作就像一个魅力

filters: {
    formatedDate(value) {
        value = value.replaceAll('-', '/')
        return format(new Date(value), 'd MMM')
    }
},

并在html中附加一个管道,如下图所示
{{日期|格式化日期}}
所以屏幕上的输出是

对于字符串“2022-10-21”

dgjrabp2

dgjrabp24#

没有一个解决方案对我有效,因为时区仍然没有被忽略。相反,我使用:

import { isValid } from 'date-fns' 

let removeTimezone = (date) => {
   date = new Date(date);
   return new Date(
     date.valueOf() + date.getTimezoneOffset() * 60 * 1000
   );
};
   
const date = '2023-01-22'
const dtDateOnly = removeTimezone(date)
if(!isValid(dtDateOnly)) console.log("cannot convert to date")
else console.log(dtDateOnly)
icomxhvb

icomxhvb5#

这对我有效(v.2+):

// wrong:
const date = format(new Date('2021-10-01'),'dd/MM/yyyy')
console.log(date) // "30/09/2021"

// ok:
const date = format(new Date('2021/10/01'),'dd/MM/yyyy')
console.log(date) // "01/10/2021"

相关问题