[]
描述
日期时间函数用于计算两个日期时间值之间的间隔,或者在一个日期时间值的基础上加上某个时间间隔,得到另一个日期时间值。
日期时间函数
表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>]) |
Year/Quarter/Month/Day函数示例-获取年季度月日
使用Year/Quarter/Month/Day函数,可以返回一个日期值中的年度/季度/月份/日的数值。
比如今天是2021年10月17日,以获取今天的年、季度、月、日为例进行介绍。
如将表达式中的“today()”换成具体字段,即可获取到字段值的年、季度、月、日。
例如使用表达式{Month(订购日期)}
获取订购日期的月份值。
QuarterName函数示例-获取季度名
在表格中第一列绑定“订购日期”字段,在第二列中使用表达式:{QuarterName(订购日期)}
预览后可见,得到了每个订购日期对应的季度名称。
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") )}**。
实际应用中,您可以参考套用以上两个表达式。
使用这两个表达式进行转换后,效果如下。
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", 订购日期), "一", "二", "三", "四")}季度。
在分组尾和表尾单元格中添加适当汇总。
预览报表,查看效果。