有没有更好的方法来找到这个月的最后一天?

时间:2014-07-10 16:41:45

标签: crystal-reports sap

if month({@end-date}) = 1 then 
  if day({@end-date}) = 1 then
    dateadd("d",30,{@end-date})
  else if day({@end-date}) = 2 then
    dateadd("d",29,{@end-date})
  else if day({@end-date}) = 3 then
    dateadd("d",28,{@end-date})
  else if day({@end-date}) = 4 then
    dateadd("d",27,{@end-date})
  else if day({@end-date}) = 5 then
    dateadd("d",26,{@end-date})
  else if day({@end-date}) = 6 then
    dateadd("d",25,{@end-date})
  else if day({@end-date}) = 7 then
    dateadd("d",24,{@end-date})
  else if day({@end-date}) = 8 then
    dateadd("d",23,{@end-date})
  else if day({@end-date}) = 9 then
    dateadd("d",22,{@end-date})
  else if day({@end-date}) = 10 then
    dateadd("d",21,{@end-date})
  else if day({@end-date}) = 11 then
    dateadd("d",20,{@end-date})
  else if day({@end-date}) = 12 then
    dateadd("d",19,{@end-date})
  else if day({@end-date}) = 13 then
    dateadd("d",18,{@end-date})
  else if day({@end-date}) = 14 then
    dateadd("d",17,{@end-date})
  else if day({@end-date}) = 15 then
    dateadd("d",16,{@end-date})
  else if day({@end-date}) = 16 then
    dateadd("d",15,{@end-date})
  else if day({@end-date}) = 17 then
    dateadd("d",14,{@end-date})
  else if day({@end-date}) = 18 then
    dateadd("d",13,{@end-date})
  else if day({@end-date}) = 19 then
    dateadd("d",12,{@end-date})
  else if day({@end-date}) = 20 then
    dateadd("d",11,{@end-date})
  else if day({@end-date}) = 21 then
    dateadd("d",10,{@end-date})
  else if day({@end-date}) = 22then
    dateadd("d",9,{@end-date})
  else if day({@end-date}) = 23 then
    dateadd("d",8,{@end-date})
  else if day({@end-date}) = 24 then
    dateadd("d",7,{@end-date})
  else if day({@end-date}) = 25 then
    dateadd("d",6,{@end-date})
  else if day({@end-date}) = 26 then
    dateadd("d",5,{@end-date})
  else if day({@end-date}) = 27 then
    dateadd("d",4,{@end-date})
  else if day({@end-date}) = 28 then
    dateadd("d",3,{@end-date})
  else if day({@end-date}) = 29 then
    dateadd("d",2,{@end-date})
  else 
    dateadd("d",1,{@end-date})

我希望在给定日期字段的情况下找到该月的最后一天。有一个更好的方法吗?例如,2014年7月1日将返回2014年1月31日,2014年8月2日将返回02/28/2014,依此类推。

2 个答案:

答案 0 :(得分:1)

您可以使用DateSerial()功能轻松地从原始日期构建您的EOM日期。这段代码基本上做的是找到下个月的第一天,然后返回一天给你当月的结束。您可能希望查看有关该功能的官方文档,以澄清发生了什么。

DateSerial
(
 year({table.date}, //year
 month({table.date}) + 1, //the following month
 1 - 1 //days; go back one day from the first of the following month
) 

答案 1 :(得分:0)

我总结一个月,然后减去一天的部分。下面的公式应该做的工作。

NumberVar dayOfMonth := DatePart ("d", {Result.DataContrato});
DateTimeVar sameDayNextMonth := DateAdd ("m", 1, {Result.DataContrato});
DateTimeVar lastDayOfMonth := DateAdd("d", -dayOfMonth, sameDayNextMonth);
lastDayOfMonth

只是另一种选择。