【水晶报表小技巧-使用-3】 自定日期时间格式输出

新建一个公式字段:

if (Time({DPA.QUOTATION_CLOSE_DATE}) = Time(23,59,00)) then
   totext({DPA.QUOTATION_CLOSE_DATE},"dd/MM/yyyy")
else

   totext({DPA.QUOTATION_CLOSE_DATE},"dd/MM/yyyy hh:mm tt", "am", "pm")


-------------------------------------------------------------------------

totext(year(CDate({MyTable.FDate})),'####')+ ' 年' +totext(month(CDate({MyTable.FDate})),'##')+ ' 月' +totext(day(CDate({MyTable.FDate})),'##')+ ' 日'  ;

------------------------------------------------------

水晶报表格式化日期

设置对象格式-->显示字符串-->公式-->:ToText(CDate({dt1.date}),"yyyy-MM-dd");

水晶報表日期格式轉化

第一種  日期格式: 

Local dateTimeVar tdate; 


tdate := {work_plan_Internal_Trial.create_date};


totext(year(tdate),'####')+ '-' +totext(month(tdate),'##')+ '-' +totext(day(tdate),'##') ;

第二種  日期格式:



dateTimeVar pdate;


pdate := {UV_EDI_Order_List.Req_Delivery_Date};


totext(pdate, "yyyy/MM/dd");


-------------------------------------------------------------------------------------------

一般我们可以使用公式来实现一些特殊的功能,但是对于一些需要重复处理的情况
可以使用自定义函数来实现

进入公式编辑界面 ,可以看到在左上角有两个项目:

报表自定义函数和储备库自定义函数

报表自定义函数只存在于单一报表模板内,不同模板间不可以共用。
储备库自定义函数对于单独的水晶报表和.Net自带的版本是不可用的,这是水晶报表服务器版本或BOE的一个功能
将函数转换为储备库自定义函数后,该函数将存储到系统数据库,从而不同报表可以进行函数共用。
不过对于单一函数功能来说并没有什么影响。

现在我结合一个实例,说一下自定义函数的使用。
有一个命题是这样的,将一个日期型的字段【2008-10-28】,显示为【二零零八年十月二十八日】
使用自定义日期格式是达不到这种效果的,虽然我们可以通过公式来实现,但是对于多个这种的字段,每次都写公式还是很麻烦的。
所以这里选择用自定义函数实现。

切换到公式编辑器界面,在【报表自定义函数】上点右键,新建一个函数,名称为mydate。
将语法切换为Basic(当然你也可以用Crystal语法),然后编写函数体


具体的函数内容我就不做说明了,这里我用了两个函数来是实现此功能。
另一个函数是ChNumber,用来处理mydate中的复用。

函数体如下

 

' 进行日期转换
Function  myDate (date1  as   date )
    
Dim  sY  as   string
    
dim  sM  as   string
    
Dim  sD  as   string
' 分别取出年月日   
sY = totext( year (date1), 0 )
sM
= totext( month (date1), 0 )
sD
= totext( day (date1), 0 )
    myDate 
= chNumber(sY, " 0 " &   " "   &   chNumber(sM, " 1 " &   " "   &  chNumber(sD, " 1 " &   " "
End Function

 

' s待处理的参数,t参数类型。0为年份,逐个字符替换,1为月份和日期,10进位
Function  ChNumber ( s  as   string , t  as   string )
    
Dim  s0  as   string
    
' 先全部替换
    s0 = Replace (s, " , " , "" )
    s0
= Replace (s0, " 0 " , " " )
    s0
= Replace (s0, " 1 " , " " )
    s0
= Replace (s0, " 2 " , " " )
    s0
= Replace (s0, " 3 " , " " )
    s0
= Replace (s0, " 4 " , " " )
    s0
= Replace (s0, " 5 " , " " )
    s0
= Replace (s0, " 6 " , " " )
    s0
= Replace (s0, " 7 " , " " )
    s0
= Replace (s0, " 8 " , " " )
    s0
= Replace (s0, " 9 " , " " )
    
' 进行月日的十进位处理
     If  t = " 1 "   then
        
' 十进位处理,在两个数字中间加入一个“十”字
         If   Len (s0) = 2   Then
                s0
= left (s0, 1 &   " "   &   right (s0, 1 )
                
' 处理刚好为10、20、30的情况
                 if   left (s0, 1 ) = " "   then  s0 = replace (s0, " 一十 " , " " )
                
if   right (s0, 1 ) = " "   then  s0 = replace (s0, " " , "" )
        
end   if
    
end   if
    ChNumber 
= s0
End Function

 

然后我们来做个简单的测试:

新建立一个日期型的参数xx,

然后做一个公式yy,公式内容为:mydate({?xx})

显示为:二零零八年十月二十八日




  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值