【问题标题】:Datediff in Crystal Report水晶报表中的日期差异
【发布时间】:2026-02-09 01:10:01
【问题描述】:

在开始之前,我想说对不起,我的问题可能有点愚蠢,因为我是 CR 的新手。

我在 Crystal Report 14.0.12 版中添加了一个 datediff 公式, 对于某些特殊情况,它会返回错误的结果。

公式如下;

DATEDIFF('M',{START_DATE},{END_DATE})

如果开始日期是 2018-05-01,结束日期是 2020-04-30,结果应该是 '24', 但它返回'23'。 如果日期范围在第一天或最后一天,似乎有上述错误。

此外,我对其他公式还有另一个问题。

我输入下面的公式是为了得到某个日期字段的“下一个日期”,

DATE(YEAR({date_field}),MONTH({date_field}),DAY({date_field}+1))

当日期字段是某个月份的“结束日期”时会出现问题。

例如,如果日期字段为 2020-03-31,则预期结果为 2020-04-01, 但我的公式返回类似于“2020-03-01”。

请告诉我应该怎么做才能得到正确的结果。

非常感谢:)

【问题讨论】:

    标签: crystal-reports datediff


    【解决方案1】:

    关于您的DateDiff() 功能。

    您在提问时可能打错字了吗?该函数的第一个参数是 intervalType 并且是一个字符串表达式,因此它应该包含在双引号内;你的问题中有单引号。使用单引号会引发语法错误。此外,Month 的 intervalType 应表示为小写“m”。

    至于您在日期上加 1 天的问题,我建议您使用 DateAdd(intervalType, nIntervals, startDateTime) 函数来完成此任务。试试这个公式:

    DateAdd("d", 1, {date_field})
    

    但是,请注意,此函数将返回一个 DateTime 值,因此如果您想从返回的日期中删除时间戳,您需要使用 Date() 函数将整个函数转换为 Date 数据类型如下:

    Date(DateAdd("d", 1, {date_field}))
    

    【讨论】:

      【解决方案2】:

      单引号没问题。问题的根源在于将 1 添加到 31 是 32(由于日期逻辑,它被回绕回 1)。

      以上使用 DateAdd() 的建议是正确的解决方案。

      【讨论】: