diff --git a/application/Espo/ORM/Query/Part/Expression.php b/application/Espo/ORM/Query/Part/Expression.php index e2e3c46aec..564a176bbb 100644 --- a/application/Espo/ORM/Query/Part/Expression.php +++ b/application/Espo/ORM/Query/Part/Expression.php @@ -539,6 +539,46 @@ class Expression implements WhereItem return self::composeFunction('UNIX_TIMESTAMP', $dateTime); } + /** + * Difference between two dates in days. Floor is applied. + * + * @since 10.0.0 + */ + public function timestampDiffDay(Expression $from, Expression $to): self + { + return self::composeFunction('TIMESTAMPDIFF_DAY', $from, $to); + } + + /** + * Difference between two dates in hours. Floor is applied. + * + * @since 10.0.0 + */ + public function timestampDiffHour(Expression $from, Expression $to): self + { + return self::composeFunction('TIMESTAMPDIFF_HOUR', $from, $to); + } + + /** + * Difference between two dates in minutes. Floor is applied. + * + * @since 10.0.0 + */ + public function timestampDiffMinute(Expression $from, Expression $to): self + { + return self::composeFunction('TIMESTAMPDIFF_MINUTE', $from, $to); + } + + /** + * Difference between two dates in seconds. + * + * @since 10.0.0 + */ + public function timestampDiffSecond(Expression $from, Expression $to): self + { + return self::composeFunction('TIMESTAMPDIFF_SECOND', $from, $to); + } + /** * 'NOW' function. A current date and time. */ diff --git a/application/Espo/ORM/QueryComposer/PostgresqlQueryComposer.php b/application/Espo/ORM/QueryComposer/PostgresqlQueryComposer.php index f933efd3bb..a59f7bd952 100644 --- a/application/Espo/ORM/QueryComposer/PostgresqlQueryComposer.php +++ b/application/Espo/ORM/QueryComposer/PostgresqlQueryComposer.php @@ -346,10 +346,10 @@ class PostgresqlQueryComposer extends BaseQueryComposer return "FLOOR(($toEpoch - $fromEpoch) / (3600 * 24))"; case 'TIMESTAMPDIFF_HOUR': - return "($toEpoch - $fromEpoch) / 3600"; + return "FLOOR(($toEpoch - $fromEpoch) / 3600)"; case 'TIMESTAMPDIFF_MINUTE': - return "($toEpoch - $fromEpoch) / 60"; + return "FLOOR(($toEpoch - $fromEpoch) / 60)"; case 'TIMESTAMPDIFF_SECOND': return "$toEpoch - $fromEpoch";