如何在 Luxon 中使用 diff 方法

Posted

技术标签:

【中文标题】如何在 Luxon 中使用 diff 方法【英文标题】:How to use diff method in Luxon 【发布时间】:2019-12-16 19:26:56 【问题描述】:

我目前从日历控件中获取日期,并使用 luxon 添加天数、分钟数并将其更改为 LongHours 格式,如下所示: newValue : 是我从前端(日历控件)获得的值

  let formattedDate: any;
  FormattedDate = DateTime.fromJSDate(new Date(newValue)).plus( days: 1, hours: 3, minutes: 13, seconds: 10 ).toLocaleString(DateTime.DATETIME_HUGE_WITH_SECONDS)
  console.log(formattedDate);

  const formattedDateParsed = DateTime.fromJSDate(new Date(formattedDate));
  const newValueParsed = DateTime.fromJSDate(new Date(newValue));

  var diffInMonths = formattedDateParsed.diff(newValueParsed, ['months', 'days', 'hours', 'minutes', 'seconds']);
  diffInMonths.toObject(); //=>  months: 1 
  console.log(diffInMonths.toObject());

目前 formattedDateParsed 为“Null”

我可以就如何解析日期以便计算 diff 获得一些帮助

【问题讨论】:

能否提供newValue的样本值? 印度标准时间 1970 年 1 月 2 日星期五上午 8:43:10 是字符串还是 javascript 日期?如果是 Js Date 我认为你可以删除 new Date,而如果是字符串我担心 new Date 不能正确 parse 它,你可以使用 fromFormat 【参考方案1】:

这里发生了一些事情。

首先,FormattedDateformattedDate 是不同的变量,所以 formattedDate 没有被设置:

let formattedDate: any;
FormattedDate = DateTime.fromJSDate(new Date(newValue)).plus( days: 1, hours: 3, minutes: 13, seconds: 10 ).toLocaleString(DateTime.DATETIME_HUGE_WITH_SECONDS)
console.log(formattedDate);

其次,您将转换为字符串,然后再转换回 DateTime,使用 Date 构造函数作为解析器,这不是一个好主意,因为 a) 它是不必要的,并且 b) 浏览器对于哪个不是超级一致的他们可以解析的字符串。

相反,我们只转换一次:

const newValueParsed = DateTime.fromJSDate(new Date(newValue));
const laterDate = newValueParsed.plus( days: 1, hours: 3, minutes: 13, seconds: 10 );
const diffInMonths = laterDate.diff(newValueParsed, ['months', 'days', 'hours', 'minutes', 'seconds']);
diffInMonths.toObject(); // => months: 0, days: 1, hours: 3, minutes: 13, seconds: 10

【讨论】:

以上是关于如何在 Luxon 中使用 diff 方法的主要内容,如果未能解决你的问题,请参考以下文章

在 javascript/nodejs 中使用 Luxon 从工作日获取日期

如何比较 Luxon 中的持续时间或间隔?

表单的 post 方法如何在幕后实际工作

RDD take()方法如何在内部工作?

如何使用 Luxon 格式化时间(不是日期)?

如何使用 Luxon 格式化日期?