Prolog 获取两个日期之间的天数差异

Prolog Get the differences in days between two dates

我一直在尝试比较 prolog 中的 2 个日期。

日期格式为 date(YYYY, MM, DD)

例如:(2016,04,21).

我想比较两个日期并了解这些日期之间的差异(以天为单位)是否大于 15 天(2 周)。

%dateDifference( number_of_day, date_no1, date_no2 ).
dateDifference( 35, date(2003,8,16), date(2003,9,20) ).

首先,您应该记下@Boris 的备注, 第二, 为了简化问题,你的谓词分为三个部分:

第 1 部分:

  • 知道年份是闰年还是闰年,
  • 影响每个月的天数,
  • 最后这部分遵循以下规则;

代码:

calcule_days([Y,M,D],Res):-
    Res is (((Y*1461)/4)+((M*153)/5)+D).

第 2 部分:

  • 计算两个日期之间的差异所以
  • formula(第 1 部分)应用于日期 1 和日期 2,
  • 计算两个结果的差值difference_date1_date2,
  • 为避免负号添加 abs(difference_date1_date2)
  • 获得增值的方法round (result_abs_pred)

演示代码:

dateDifference(NumberOfDays,date(YEAR1,MONTH1,DAY1),date(YEAR2,MONTH2,DAY2)):-
           ...

第 3 部分:

  • 测试结果是否为>= 15,结果必须为True/false

演示代码:

bigger_2weeks(date(YEAR1,MONTH1,DAY1),date(YEAR2,MONTH2,DAY2)):-
...

计算两个日期之间的天数差异可能很简单,也可能很棘手,具体取决于日历和涵盖的时间段。假设公历,常见的解决方案是将日期转换为儒略日。正如@mat 在其评论中提到的,对于 SWI-Prolog,请考虑 library(julian);

https://github.com/mndrix/julian

对于可与大多数 Prolog 系统(包括 SWI-Prolog)一起使用的便携式解决方案,Logtalk 包含可用于这些计算的第三方 ISO 8601 库:

http://logtalk.org/library/iso8601_0.html