时间函数 - 持续时间

持续时间函数允许创建和操作时间 DURATION 值。

另请参见 时间值时间运算符

duration()

详情

语法

duration(input)

描述

创建一个 DURATION 值。

参数

名称

类型

描述

input

ANY

一个映射,可以选择包含以下键:'years'、'quarters'、'months'、'weeks'、'days'、'hours'、'minutes'、'seconds'、'milliseconds'、'microseconds' 或 'nanoseconds'。

返回

DURATION

注意事项

必须提供至少一个参数(duration()duration({}) 无效)。

对提供多少个参数没有限制。

可以有一个 DURATION,其中较小单位(例如 seconds)的数量超过较大单位(例如 days)的阈值。

参数的值可以表示为十进制小数。

参数的值可以任意大。

参数的值可以为负数。

可以单独访问 DURATION 对象的组件

示例 1. 使用持续时间组件的 duration()
查询
UNWIND [
duration({days: 14, hours:16, minutes: 12}),
duration({months: 5, days: 1.5}),
duration({months: 0.75}),
duration({weeks: 2.5}),
duration({minutes: 1.5, seconds: 1, milliseconds: 123, microseconds: 456, nanoseconds: 789}),
duration({minutes: 1.5, seconds: 1, nanoseconds: 123456789})
] AS aDuration
RETURN aDuration
结果
aDuration

P14DT16H12M

P5M1DT12H

P22DT19H51M49.5S

P17DT12H

PT1M31.123456789S

PT1M31.123456789S

行数:6

示例 2. 使用 STRING 值的 duration()
查询
UNWIND [
duration("P14DT16H12M"),
duration("P5M1.5D"),
duration("P0.75M"),
duration("PT0.75M"),
duration("P2012-02-02T14:37:21.545")
] AS aDuration
RETURN aDuration
结果
aDuration

P14DT16H12M

P5M1DT12H

P22DT19H51M49.5S

PT45S

P2012Y2M2DT14H37M21.545S

行数:5

duration.between()

详情

语法

duration.between(from, to)

描述

计算 from 时刻(包含)和 to 时刻(不包含)之间的 DURATION,以逻辑单位表示。

参数

名称

类型

描述

from

ANY

一个时间时刻类型(DATELOCAL TIMEZONED TIMELOCAL DATETIMEZONED DATETIME),表示开始时刻。

to

ANY

一个时间时刻类型(DATELOCAL TIMEZONED TIMELOCAL DATETIMEZONED DATETIME),表示结束时刻。

返回

DURATION

注意事项

如果 to 发生在 from 之前,则结果 DURATION 将为负数。

如果 from 有时间分量而 to 没有,则假设 to 的时间分量为午夜,反之亦然。

如果 from 有时区分量而 to 没有,则假设 to 的时区分量与 from 相同,反之亦然。

如果 to 有日期分量而 from 没有,则假设 from 的日期分量与 to 相同,反之亦然。

示例 3. duration.between()
查询
UNWIND [
duration.between(date("1984-10-11"), date("1985-11-25")),
duration.between(date("1985-11-25"), date("1984-10-11")),
duration.between(date("1984-10-11"), datetime("1984-10-12T21:40:32.142+0100")),
duration.between(date("2015-06-24"), localtime("14:30")),
duration.between(localtime("14:30"), time("16:30+0100")),
duration.between(localdatetime("2015-07-21T21:40:32.142"), localdatetime("2016-07-21T21:45:22.142")),
duration.between(datetime({year: 2017, month: 10, day: 29, hour: 0, timezone: 'Europe/Stockholm'}), datetime({year: 2017, month: 10, day: 29, hour: 0, timezone: 'Europe/London'}))
] AS aDuration
RETURN aDuration
结果
aDuration

P1Y1M14D

P-1Y-1M-14D

P1DT21H40M32.142S

PT14H30M

PT2H

P1YT4M50S

PT1H

行数:7

duration.inDays()

详情

语法

duration.inDays(from, to)

描述

计算 from 时刻(包含)和 to 时刻(不包含)之间的 DURATION,以天为单位。

参数

名称

类型

描述

from

ANY

一个时间时刻类型(DATELOCAL TIMEZONED TIMELOCAL DATETIMEZONED DATETIME),表示开始时刻。

to

ANY

一个时间时刻类型(DATELOCAL TIMEZONED TIMELOCAL DATETIMEZONED DATETIME),表示结束时刻。

返回

DURATION

注意事项

如果 to 发生在 from 之前,则结果 DURATION 将为负数。

如果 from 有时间分量而 to 没有,则假设 to 的时间分量为午夜,反之亦然。

如果 from 有时区分量而 to 没有,则假设 to 的时区分量与 from 相同,反之亦然。

如果 from 有日期分量而 to 没有,则假设 to 的日期分量与 from 相同,反之亦然。

任何小于一天的差值都将被忽略。

通过返回 days 分量来获取 DURATION 中的总天数。有关更多信息,请参见 持续时间组件

示例 4. duration.inDays()
查询
UNWIND [
duration.inDays(date("1984-10-11"), date("1985-11-25")),
duration.inDays(date("1985-11-25"), date("1984-10-11")),
duration.inDays(date("1984-10-11"), datetime("1984-10-12T21:40:32.142+0100")),
duration.inDays(date("2015-06-24"), localtime("14:30")),
duration.inDays(localdatetime("2015-07-21T21:40:32.142"), localdatetime("2016-07-21T21:45:22.142")),
duration.inDays(datetime({year: 2017, month: 10, day: 29, hour: 0, timezone: 'Europe/Stockholm'}), datetime({year: 2017, month: 10, day: 29, hour: 0, timezone: 'Europe/London'}))
] AS aDuration
RETURN aDuration
结果
aDuration

P410D

P-410D

P1D

PT0S

P366D

PT0S

行数:6

duration.inMonths()

详情

语法

duration.inMonths(from, to)

描述

计算 from 时刻(包含)和 to 时刻(不包含)之间的 DURATION,以月为单位。

参数

名称

类型

描述

from

ANY

一个时间时刻类型(DATELOCAL TIMEZONED TIMELOCAL DATETIMEZONED DATETIME),表示开始时刻。

to

ANY

一个时间时刻类型(DATELOCAL TIMEZONED TIMELOCAL DATETIMEZONED DATETIME),表示结束时刻。

返回

DURATION

注意事项

如果 to 发生在 from 之前,则结果 DURATION 将为负数。

如果 from 有时间分量而 to 没有,则假设 to 的时间分量为午夜,反之亦然。

如果 from 有时区分量而 to 没有,则假设 to 的时区分量与 from 相同,反之亦然。

如果 from 有日期分量而 to 没有,则假设 to 的日期分量与 from 相同,反之亦然。

任何小于一个月的差值都将被忽略。

通过返回 months 分量来获取 DURATION 中的总月数。有关更多信息,请参见 持续时间组件

示例 5. duration.inMonths()
查询
UNWIND [
duration.inMonths(date("1984-10-11"), date("1985-11-25")),
duration.inMonths(date("1985-11-25"), date("1984-10-11")),
duration.inMonths(date("1984-10-11"), datetime("1984-10-12T21:40:32.142+0100")),
duration.inMonths(date("2015-06-24"), localtime("14:30")),
duration.inMonths(localdatetime("2015-07-21T21:40:32.142"), localdatetime("2016-07-21T21:45:22.142")),
duration.inMonths(datetime({year: 2017, month: 10, day: 29, hour: 0, timezone: 'Europe/Stockholm'}), datetime({year: 2017, month: 10, day: 29, hour: 0, timezone: 'Europe/London'}))
] AS aDuration
RETURN aDuration
结果
aDuration

P1Y1M

P-1Y-1M

PT0S

PT0S

P1Y

PT0S

行数:6

duration.inSeconds()

详情

语法

duration.inSeconds(from, to)

描述

计算 from 时刻(包含)和 to 时刻(不包含)之间的 DURATION,以秒为单位。

参数

名称

类型

描述

from

ANY

一个时间时刻类型(DATELOCAL TIMEZONED TIMELOCAL DATETIMEZONED DATETIME),表示开始时刻。

to

ANY

一个时间时刻类型(DATELOCAL TIMEZONED TIMELOCAL DATETIMEZONED DATETIME),表示结束时刻。

返回

DURATION

注意事项

如果 to 发生在 from 之前,则结果 DURATION 将为负数。

如果 from 有时间分量而 to 没有,则假设 to 的时间分量为午夜,反之亦然。

如果 from 有时区分量而 to 没有,则假设 to 的时区分量与 from 相同,反之亦然。

如果 from 有日期分量而 to 没有,则假设 to 的日期分量与 from 相同,反之亦然。

通过返回 seconds 分量来获取 DURATION 中的总秒数。有关更多信息,请参见 持续时间组件

示例 6. duration.inSeconds()
查询
UNWIND [
duration.inSeconds(date("1984-10-11"), date("1984-10-12")),
duration.inSeconds(date("1984-10-12"), date("1984-10-11")),
duration.inSeconds(date("1984-10-11"), datetime("1984-10-12T01:00:32.142+0100")),
duration.inSeconds(date("2015-06-24"), localtime("14:30")),
duration.inSeconds(datetime({year: 2017, month: 10, day: 29, hour: 0, timezone: 'Europe/Stockholm'}), datetime({year: 2017, month: 10, day: 29, hour: 0, timezone: 'Europe/London'}))
] AS aDuration
RETURN aDuration
结果
aDuration

PT24H

PT-24H

PT25H32.142S

PT14H30M

PT1H

行数:5