date-fns-从日期倒数包括几周

问题描述

我正在建立一个倒数时钟,并且正在使用date-fns。我需要能够从包括星期数在内的日期开始倒数计时。 here文档看起来好像formatDuration返回了星期数,但似乎并没有怀疑我是否需要使用其他东西?

我知道它们提供的differenceInWeeks函数,但是不确定是否适合我的情况。

谢谢。

import { intervalToDuration,formatDuration } from 'date-fns';

const units = ['years','months','weeks','days','hours','minutes','seconds'];
  let duration = intervalToDuration({
    start: new Date(2022,6,2,15),end: new Date(),});

  formatDuration(duration,{
    format: units,delimiter: ',',});

// Returns years,months,days,hours,minutes and seconds but not weeks

解决方法

在创建持续时间时,默认情况下date-fns不会添加周,如果不在持续时间中,则格式化程序不会显示它们。

您可以使用基于 days 的值的功能手动添加星期,例如

function addWeeks(duration) {
  if (!duration.weeks) {
    duration.weeks = duration.days / 7 | 0;
    duration.days = duration.days - duration.weeks*7;
  }
}

在使用之前,您可能需要测试 duration.days 是否存在。然后执行以下操作:

let duration = intervalToDuration({
  start: new Date(2022,6,2,15),end: new Date()
});

// Add weeks if missing
addWeeks(duration);

let formattedDuration = formatDuration(duration,{
  format: units,delimiter: ','
});

// "1 year,9 months,1 week,1 day,10 hours,39 minutes,27 seconds"
console.log(formattedDuration);