Crystal reports 有没有更好的办法找到一个月的最后一天?

Crystal reports 有没有更好的办法找到一个月的最后一天?,crystal-reports,sap,Crystal Reports,Sap,我正在查找给定日期字段的月份最后一天。有更好的方法吗?例如,2014年7月1日将返回2014年1月31日,2014年8月2日将返回2014年2月28日,依此类推。您可以使用DateSerial()函数从原始日期轻松构建EOM日期。这段代码的基本功能是查找下个月的第一天,然后返回一天,给出当前月的结束日期。您可能需要查看函数的官方文档,以澄清发生了什么 if month({@end-date}) = 1 then if day({@end-date}) = 1 then datead

我正在查找给定日期字段的月份最后一天。有更好的方法吗?例如,2014年7月1日将返回2014年1月31日,2014年8月2日将返回2014年2月28日,依此类推。

您可以使用
DateSerial()
函数从原始日期轻松构建EOM日期。这段代码的基本功能是查找下个月的第一天,然后返回一天,给出当前月的结束日期。您可能需要查看函数的官方文档,以澄清发生了什么

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})

我将求和一个月,然后减去一天的部分。以下公式适用于该工作

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
) 

只是另一个选项。

请说明您不是手工编写的。请正确设置此代码的格式并添加一些上下文信息。
NumberVar dayOfMonth := DatePart ("d", {Result.DataContrato});
DateTimeVar sameDayNextMonth := DateAdd ("m", 1, {Result.DataContrato});
DateTimeVar lastDayOfMonth := DateAdd("d", -dayOfMonth, sameDayNextMonth);
lastDayOfMonth