我尝试使用date-fns库解析日期,但是得到的结果是前一天。我怎样才能避免这种情况并得到正确的结果?
start = '2021-08-16' const parseStart = parse(start, 'yyyy-MM-dd', new Date());
输出:
2021-08-15T18:30:00.000Z
gr8qqesn1#
我们在尝试使用date-fns格式函数处理一个连字符串日期时遇到了类似的问题,它在格式化时从日期中减去了一天,实际上解决办法是将hypes改为斜杠。
const dateString = '2010-08-03' const date = new Date(dateString.replace(/-/g, '/'))
9bfwbjaz2#
为了避免这个时区开销,我建议将日期字符串格式化为ISO字符串,然后使用date-fns的parseISO函数。就像这样:
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
1tuwyuhd3#
我在一个过滤器中使用,所以初始值是“-”,我不得不替换它使用“/”以及,它的工作就像一个魅力
filters: { formatedDate(value) { value = value.replaceAll('-', '/') return format(new Date(value), 'd MMM') } },
并在html中附加一个管道,如下图所示{{日期|格式化日期}}所以屏幕上的输出是
对于字符串“2022-10-21”
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)
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"
5条答案
按热度按时间gr8qqesn1#
我们在尝试使用date-fns格式函数处理一个连字符串日期时遇到了类似的问题,它在格式化时从日期中减去了一天,实际上解决办法是将hypes改为斜杠。
9bfwbjaz2#
为了避免这个时区开销,我建议将日期字符串格式化为ISO字符串,然后使用date-fns的
parseISO
函数。就像这样:
1tuwyuhd3#
我在一个过滤器中使用,所以初始值是“-”,我不得不替换它使用“/”以及,它的工作就像一个魅力
并在html中附加一个管道,如下图所示
{{日期|格式化日期}}
所以屏幕上的输出是
对于字符串“2022-10-21”
dgjrabp24#
没有一个解决方案对我有效,因为时区仍然没有被忽略。相反,我使用:
icomxhvb5#
这对我有效(v.2+):