[]
        
(Showing Draft Content)

日期时间函数

  1. 描述

日期时间函数用于计算两个日期时间值之间的间隔,或者在一个日期时间值的基础上加上某个时间间隔,得到另一个日期时间值。

  1. 日期时间函数

表1 常用日期时间函数表

函数

说明

语法

DateAdd

返回一个 Date 值,其中包含添加指定时间间隔的日期和时间值。如DateAdd("d",-1,"2017-1-1")返回值为"2016-12-31"。

DateAdd(<时间单位>, <增减数值>, <日期时间表达式>)

DateDiff

返回一个 Long 值,该值指定两个 Date 值之间的时间间隔数。如DateDiff("y","2016-12-31","2017-1-1")返回值为1,表示两个日期值之间的年份差值为1。

DateDiff(<时间单位>, <日期时间值1>, <日期时间值2>[, <周内某天0-6>[, <年中某周1-53>]])

DatePart

返回一个 Integer 值,其中包含给定 Date 值的指定部分(年,月,日,时,分,秒,毫秒,星期几等)。如DatePart("m","2017-11-2")返回月份11。

DatePart(<时间单位>, <日期时间值>[, <一周的第一天>[, <一年的第一周>]])

DateSerial

返回表示指定年月日的 Date 值,其时间信息被设置为午夜 (00:00:00)。如DateSerial(2017,11,2)返回"2017-11-2 00:00:00"。

DateSerial(<年度数字>, <月份数字>, <日期数字>)

DateString

返回当前日期按当前区域设定中的日期格式显示的字符串,如"2000-12-31"。

DateString()

DateValue

返回一个 Date 值,该值包含用字符串表示的日期信息,其时间信息设置为午夜 (00:00:00)。例如:DateValue("2012-12-31")。

DateValue(<日期形式的字符串>)

Day

返回日期值的"日",例如:Day(DateValue("2013-4-5"))返回数值5。

Day(<日期时间>)

Hour

返回时间值的小时部分。

Hour(<日期时间>)

Minute

返回时间值的分钟部分。

Minute(<日期时间>)

Month

返回日期值的月份部分。

Month(<日期时间>)

MonthName

返回月份数的月份名称,例如:MonthName(3)返回"三月"。

MonthName(<月份数字>[, <是否简写>])

Now

返回当前的日期时间值。如Now()返回“2019/5/16 16:26:19”。

Now()

Second

返回日期时间值的秒。例如:{Second(DateAdd("s",123,DateValue("2013-1-2")))} 这个表达式的结果为3,原因是DateAdd函数返回的日期时间值是:2013-1-2 00:02:03,其中的秒就是3。

Second(<日期时间>)

TimeOfDay

获取当前时间,无参数,返回值不带日期部分,显示为字符串形式为"0001/1/1 9:55:36"。

TimeOfDay()

Timer

定时器函数,其内容为从0时到现在的时间,但单位是秒,如 36472.149871。

Timer()

TimeSerial

返回一个 Date 值,该值表示指定的小时、分钟和秒,其日期信息设置基点为元年 1 月 1 日,如TimeSerial(23,45,58)。

TimeSerial(<小时数字>, <分钟数字>, <秒数字>)

TimeString

返回当前时间的字符串形式,如10:17:43。

TimeString()

TimeValue

返回一个日期型数据的时间值。如TimeValue(Now())返回"0001/1/1 10:19:00"。

TimeValue(<日期时间>)

Today

返回当前日期。如Today()返回“2019/5/16 0:00:00”。

Today()

Weekday

返回代表一星期中某天的整数。如Weekday(Today)返回7,表示星期六,如果返回1表示星期日。

Weekday(<日期时间>[, <一周第一天>])

WeekdayName

返回某个整数(1-7)代表的星期几的名称,如当前日期是一个星期六时,WeekdayName(Weekday(Today))返回"星期六"。

WeekdayName(<星期几的数字>[, <是否简写>[, <一周第一天>]])

Quarter

返回日期值的季度部分

Quarter(<DateTime>)

Quarter Name

返回季度值的季度名称。

QuarterName(<DateTime>)

Year

返回一个日期值中的年度数值,如Year(Today())返回今年的年度值,如今天是2019年9月23日,那么返回2019。

Year(<日期时间>)

AddYears

在指定的日期时间基础上,再加/减指定的年数。比如,"2019/08/06".AddYears(2)将返回2021/08/06。

<DateTime>.AddYears(<增减年数>)

AddMonths

在指定的日期时间基础上,再加/减指定的月数。比如,"2019/08/06".AddMonths(2)将返回2019/10/06。

<DateTime>.AddMonths(<增减月数>)

AddDays

在指定的日期时间基础上,再加/减指定的天数。比如,"2019/08/06".AddDays(2)将返回2019/08/08;"2019/08/06".AddDays(-3)将返回2019/08/03。

<DateTime>.AddDays(<增减天数>)

AddHours

在指定的日期时间基础上,再加/减指定的小时数。比如,"2019/08/06 15:28:02".AddHours(2)将返回2019/08/06 17:28:02;"2019/08/06 15:28:02".AddHours(-3)将返回2019/08/06 12:28:02。

<DateTime>.AddHours(<增减小时数>)

AddMinutes

在指定的日期时间基础上,再加/减指定的分钟数。

<DateTime>.AddMinutes(<增减分钟数>)

AddSeconds

在指定的日期时间基础上,再加/减指定的秒数。比如,"2019/08/06 15:28:02".AddSeconds(2)将返回2019/08/06 15:28:04。

<DateTime>.AddSeconds(<增减秒数>)

AddMilliseconds

在指定的日期时间基础上,再加/减指定的毫秒数。

<DateTime>.AddMilliseconds(<增减毫秒数>)

DateTime.Parse

将一个日期时间值,返回为指定的格式。示例:{DateTime.Parse("01/01/1970")}

DateTime.Parse(<格式字符串>[, <String>])

  1. Year/Quarter/Month/Day函数示例-获取年季度月日

使用Year/Quarter/Month/Day函数,可以返回一个日期值中的年度/季度/月份/日的数值。


比如今天是2021年10月17日,以获取今天的年、季度、月、日为例进行介绍。




如将表达式中的“today()”换成具体字段,即可获取到字段值的年、季度、月、日。


例如使用表达式{Month(订购日期)} 获取订购日期的月份值。

  1. QuarterName函数示例-获取季度名

在表格中第一列绑定“订购日期”字段,在第二列中使用表达式:{QuarterName(订购日期)}


预览后可见,得到了每个订购日期对应的季度名称。



  1. DateAdd函数示例-获取月末日期/SQLite日期转换

DateAdd函数返回一个 Date 值,其中包含添加指定时间间隔的日期和时间值。如DataAdd("d",-1,"2017-1-1")返回值为"2016-12-31"。


以下分别为您介绍如何使用DateAdd函数获取月末日期以及进行SQLite日期转换。


示例一 月末日期


报表应用中经常需要制作月报,月报就需要取到整个月的数据,即从月初第一天到月末最后一天的所有业务数据。而数据库中的日期往往带有具体时间,这就容易造成最后一天的数据遗漏。


为了避免这种情况的发生,需要用次月的首日减一天来得到当月的月末日期。


以今天为例,看一下具体的实现方法:


首先得到“次月首日”:{DateAdd("M", 1, DateSerial(Year(Today()), Month(Today()), 1))}


然后用“次月首日”减一天得到需要的“月末日期”:{DateAdd("d", -1, DateAdd("M", 1, DateSerial(Year(Today()), Month(Today()), 1)))}






示例二 SQLite日期转换


SQLite数据库中的日期时间字段值存储为一个浮点数,例如:43425.455467963。


其含义为:

  • 整数部分为自1899-12-30的天数

  • 小数部分为自凌晨0点的天数,0.5即中午12点整

为了便于阅读,可以使用表达式将其显转换为 yyyy-MM-dd HH:mm:ss 形式。


以下图中的SQLite字段值为例,介绍如何进行SQLite日期字段值的转换。




实现分析:

  • “ADate”字段只有整数部分,只需要转换天数即可。使用 {DateAdd("d",ADate,"1899-12-30") } 。

  • “FGC_Create Date”字段由整数部分和小数部分组成,需要转换天数以及时分秒数。使用**{DateAdd("s", (FGC_CreateDate-Floor(FGC_CreateDate))*24*60*60, DateAdd("d",Floor(FGC_CreateDate),"1899-12-30") )}**。

实际应用中,您可以参考套用以上两个表达式。


使用这两个表达式进行转换后,效果如下。



  1. DatePart函数示例

DatePart函数返回一个 Integer 值,其中包含给定 Date 值的指定部分(年,月,日,时,分,秒,毫秒,星期几等)。如DatePart("m","2017-11-2")返回月份11。


以使用DatePart函数获取季度值为例为您介绍该函数。


由函数表定义可以了解到,使用DatePart函数可以返回 Date 值的指定部分。


以“订购日期”字段为例,可以使用这样的表达式 {DatePart("q",订购日期)} 来获取字段值季度值,返回结果为1~4。


为了使其更符合用户习惯,呈现出“一季度”,“二季度”等字样,需要再使用Choose函数转换一下。具体表达式为:{Choose(DatePart("q",订购日期) ,"一","二","三","四")&"季度"}


下面以一个简单的报表为例来看一下DatePart函数具体的应用效果。


操作步骤

  • 新建报表,添加报表数据源,并添加表格组件,按照下图所示绑定数据字段。


  • 添加分组,为表格的分组添加分组条件**{DatePart("q", 订购日期)}**,使数据按照季度进行分组显示;并按分组条件添加数据排序,使其按照季度的先后顺序显示。


  • 在分组头文本框中添加表达式显示季度值。这里使用的表达式为:{Choose(DatePart("q", 订购日期), "一", "二", "三", "四")}季度


  • 在分组尾和表尾单元格中添加适当汇总。


  • 预览报表,查看效果。