历史版本26 :常见日期函数 返回文档
编辑时间: 内容长度:图片数:目录数: 修改原因:

目录:

1. 概述编辑

在对日期型数据进行操作时,经常会遇到要获取当前日期,获取当前时间,获取日期的年月日等等操作,本文介绍帆软常用的处理日期函数。帆软处理日期的函数与 SQL 处理日期的函数所区别,例如:SQL Server 获取当天日期为:GETDATE(),帆软公式为 today()。

注:当日期型公式作为参数在超链中传参时,将会传过去带有时分秒的原始值。

2. 转化日期编辑

DATE(year,month,day):返回一个表示某一特定日期的系列数。

其中,year,month,day 若为小数将自动去掉小数取整,如:2001.5 返回值为 2001,2001.1 返回值为 2001,下面只讨论整数情况。

Year:代表年。

若为正整数不变,若为 0 或负整数,则取绝对值+1。如:year=-5 , 则 year 返回值为 6,即(|-5|+1)。

Month:代表月份。

若 month 为 1 至 12 的整数,则函数把参数值作为月。

若 month>12,则函数从本年的一月份开始往上累加。如: DATE(2000,25,2) 返回值为 2002-01-02。

若 month=<0,则函数从上年的12月份开始往减去相应的月数。如:DATE(2000,0,2) 返回值为 1999-12-02;DATE(2000,-1,2) 返回值为 1999-11-02。

注:日期同理,若超过最大天数,会从月的一号开始向上累加;小于月初天数则从上月末减去相应的月数。如:DATE(2000,3,0) 返回值为 2000 年 2 月月末,即 2000-02-29。

Day:代表日。

若日期小于等于某指定月的天数,则函数将此参数值作为日。

若日期大于某指定月的天数,则函数从指定月份的第一天开始往上累加。若日期大于两个或多个月的总天数,则函数把减去两个月或多个月的余数加到第三或第四个月上,依此类推。例如:DATE(2000,3,35) 返回值为 2000-04-04。

注:若需要处理公式中日期的一部分,如年或月等,则可用此公式。若年,月和日是函数而不是函数中的常量,则此公式最能体现其作用。

示例:

DATE(1978, 9, 19) 返回值为 1978-09-19。

DATE(1211, 12, 1) 返回值为 1211-12-01。

在单元格中输入:=date(2011,1,10) ,其返回值为 2011-01-10。

若月份大于 12 将从年的一月份开始往上累加,如在单元格中输入:=date(2011,13,10) ,其返回值为 2012-01-10。

3. 获取当前日期、时间编辑

3.1 当前日期(年月日)

today() 即获取当前日期。

在单元格中输入=today() ,若系统日期是 2011 年 11 月 11 号,则返回值为 2011-11-11。

3.2 当前时间(时分秒)

now() 即获取当前日期与时间。

在单元格中输入=now() ,返回值类型为日期时间,yyyy-MM-dd hh:mm:ss;如:now(),单元格格式:常规,返回的值 2012-06-20 14:55:57。

4. 获取日期的年月日编辑

分别通过 year(),month(),day() 这三个函数来获取日期的年月日。

  • 获取年份:在单元格中输入 =year("2011-11-11") ,返回值为 2011。

  • 获取月份:在单元格中输入 =month("2011-11-11") ,返回值为 11。

  • 获取日期:在单元格中输入 =day("2011-11-11") ,返回值为 11。

注:若 year(),month(),day() 对应的年\月\日带有小数,将返回当前年或月或日,相当于 year(today()),month(today()),day(today())。

5. 将日期格式化编辑

可以使用 todate() 函数将任何日期形式的数据转化为日期型,或者使用 format() 函数可以转化成任何日期形式的数据。

5.1 将日期格式的字符串转化成日期型

todate() 可以将任何日期形式的数据转化成日期型即:yyyy-MM-dd 型数据。

在单元格中输入 =todate("2011/11/11") ,返回值为 2011-11-11。

在单元格中输入 =todate("2/15/11","MM/dd/yy") ,返回值为 2011-02-15。

5.2 将日期型数据转化成其他格式的日期形式

format() 可以将日期型数据转化成其他形式的数据。

在单元格中输入 =format("2/15/2011","dd/MM/yyyy") ,返回值为 15/02/2011。

在单元格中输入 =format("2/15/2011","yyyy-MM-dd") ,返回值为 2011-02-15。

6. 日期的加减编辑

可以通过 datedelta()monthdelta()yeardelta() 这三个函数来实现对日期的加减。

1)日期的加减:在单元格中输入 =datedelta(today(),-1) ,返回当前日期前一天的日期,若系统日期是 2011-11-11,则返回值为 2011-11-10。

注:公式中的 -1 表示减一天若是正数则表示加相应的天数。

2)月份的加减:在单元格中输入 =monthdelta(today(),-1) ,返回当前日期上一个月的日期,若系统时间是 2011-11-11,则返回值为 2011-10-11。

3)年份的加减:在单元格中输入 =yeardelta(today(),-1) ,返回当前日期上一年的日期,若系统日期是 2011-11-11,则返回值为 2010-11-11。

7. 获取某年/季度/月/周的第几天编辑

可以通过 dateinyear(),dateinquarter(),dateinmonth(),dateinweek() 这四个函数来实现某年/季度/月/周的第几天。

1)可以通过 dateinyear(date, number) 来获取某年的第几天。

在单元格中输入 =dateinyear(today(),1) ,返回当前年的第一天,若系统日期是 2011-11-11,则返回值为 2011-01-01。

在单元格中输入 =dateinyear(today(),-1) ,返回当前年的最后一天,若系统日期是 2011-11-11,则返回值为 2011-12-31。

2)可以通过 dateinquarter(date, number) 来获取某季度的第几天。

在单元格中输入 =dateinquarter(today(),1) ,返回当前季度的第一天,若系统日期是 2011-11-11,则返回值为 2011-10-01。

在单元格中输入 =dateinquarter(today(),-1) ,返回当前季度的最后一天,若系统日期是 2011-11-11,则返回值为 2011-12-31。

3)可以通过 dateinmonth(date, number)来获取某月的第几天。

在单元格中输入 =dateinmonth(today(),1) ,返回当前月的第一天,若系统日期是 2011-11-11,则返回值为 2011-11-01。

在单元格中输入 =dateinmonth(today(),-1) ,返回当前月的最后一天,若系统日期是 2011-11-11,则返回值为 2011-11-30。

4)可以通过 dateinweek(date, number)来获取某周的第几天。

在单元格中输入 =dateinweek(today(),1) ,返回当前周的第一天,若系统日期是 2011-11-11,则返回值为 2011-11-07。

在单元格中输入 =dateinweek(today(),-1) ,返回当前周的最后一天,若系统日期是 2011-11-11,则返回值为 2011-11-13。

8. 阳历转化成农历编辑

可以通过 lunar(year,day,month) 函数来实现将阳历转化成农历。

在单元格中输入:=lunar(2011,10,11) ,返回的是 2011 年 10 月 11 号对应的农历日期即返回值为辛卯年九月十五。

在单元格中输入:=lunar(2011,10,1) ,返回的是 2011 年 10 月 1 号对应的农历日期即返回值为辛卯年九月初五。

注:lunar 公式支持的时间段为 1900-2100 年。

9. 获取某月的当月、上月、去年同期、月末等编辑

相关公式如下表:

内容
公式
当月MONTH(today())
去年同期YEARDELTA(today(),-1)
上上月date(year(today()),MONTH(today())-2,day(today()))
上月date(year(today()),MONTH(today())-1,day(today()))
去年同期上月date(year(today())-1,MONTH(today())-1,day(today()))
本月月末DATEINMONTH(TODAY(),-1)
本月月初DATEINMONTH(TODAY(),1)
上月月末DATEINMONTH(MONTHDELTA(TODAY(),-1),-1)
上月月初DATEINMONTH(MONTHDELTA(TODAY(),-1),1)