账号通
    

账号  

密码  

7367

查看

17

回复
主题:[分享]10行代码=132行代码:非常简单就可以实现ASP时间格式化的函数分享 [收藏主题] 转到:  
曾铃军 当前离线

119

主题

2

广播

0

粉丝
添加关注
级别:一年级

用户积分:295 分
登录次数:152 次
注册时间:2010/4/5
最后登录:2014/4/11
曾铃军 发表于:2010/7/29 22:35:02   | 只看该作者 查看该作者主题 楼主 
做在线知识付费 选科汛云开店

前几天我在配SQL标签的时候,因为需要用到时间,发现科讯的时间格式还蛮多的,我好奇想看看这个函数是怎么写的,仔细一看吓了一跳,这个函数居然有132行。这个突然让我想到今年高考的理科考生“神奇”解题的思路:在常规思路下,那道理科题目是需要25个以上的步骤才可以将问题解决,而且专家们还故意在常规的思路中设置了重重障碍,估计的作对率在5%,但是出奇的是,有好几个学生居然使用5-6个步骤就解答出来而其很容易看懂,思路非常清晰....,最后专家们感叹这些学生很厉害,除了赞叹之余,我被引入了一个思考的境地......,


总结分析:其实这个是建模型带来的好处,我在上学阶段也一直很注重学习数学的思维,特别是建模型。如果说数据结构是计算机的灵魂,那么我说建模型是社会一切实践的核心,下面我使用这一思路去修正科讯的时间格式化函数,当然还看到很多科讯的函数是可以精简的,比方说科讯的生成函数与缓存函数,还有编辑器调用函数,但是由于时间关系,我这里只例举一个说明问题。


科讯这个时间格式化的函数在我看到之后,发现居然有132行,我在思考,难道真的需要这么多的步骤才可以完成吗?为什么JSP的编程中可以使用YY-MM-DD hh:mm:ss或者YY年MM月DD日等的格式(模型)就可以完成,也不需要任何的重写函数,ASP重写函数是否可以借鉴其思路来建模型呢?我根据程序上下结构,根本没有看它的执行调用的地方,我就可以将函数通过模型精简到10行完全可以实现科讯的时间格式化函数的所有功能(这个科讯官方可以检测),而且非常容易懂不需要大家在开发的时候去记忆或者查询:0到底是什么是什么返回值,1到底是什么是什么返回值,2到底是什么是什么返回值,3到底是什么返回值....,只需要知道你需要什么样的格式,传递模型过去即可返回这种模型或格式的值。这个思路jsp就处理的比较好,jsp开发的时候只需要大家知道接口函数名以及接口函数实现的功能与返回值,大家就可以去各自开发,如果asp可以引入这些对象性的高级思想,那么这个就可以明显提团队开发的效率),不信大家看下面的代码,然后比较最下面的科讯的代码。然后解释之类的大家应该不需要了,明白我想表达什么,也知道函数模型在表达什么。


附:
一:我其实没有别的意思,只是想让程序更加简洁易懂,让大家可以更加好的去理解程序进行二次开发,你们既然提供二次开发的机会给大家,那么代码的简洁性固然重要。像官方所描述的加粗与加颜色,这个不是也一样吗?


二:假设你是需要这样的格式:(2010/07/27),那么模型:(YY/MM/DD),假设你需要(2010/07/27),那么模型:(<b>YY/MM/DD</b>),再假设你需要[2010年07月27日],那么你的模型就是:[<font color=red>YY</font>年MM月<font color=green>YY</font>日],不知道你们是否觉得这样不行,还是怎么的?这样程序开发者难道不是好理解吗?你们的论坛主要是针对科讯CMS爱好者交流与问题的讨论社区,你们原来那个程序没有使用的原因我自己也测试了,月份标签MM和分钟标签mm在执行替换的时候很容易导致返回值不正确。我只是想通过讨论让用户得到更加好的体验,我也未曾打算开发什么CMS,用你们的CMS给我带来了很多方便,所以我如果发现能在最大程度上提高效率的,我就会去改你们的程序。包括伪静态的,以及栏目域名与文章的域名绑定问题,均使用伪静态规则实现,所以不必要再程序中增加哪些域名判断的东西,这样不是又可以给程序瘦身吗?(当前这个也有前提,必须是伪静态的模式之下才有效)


如果只要年月:time = DateTimeFormat(ByVal DateTime, "YY年MM月")


如果只要月日:time = DateTimeFormat(ByVal DateTime, "MM月DD日")


如果只要时分秒:time = DateTimeFormat(ByVal DateTime, "hh时ff分ss秒")


....
YY年MM月,MM月DD日,hh时ff分ss秒,MM/DD hh:ff:ss,【MM-DD】,[MM-DD hh:ff] 这些就是模型


非常简单就可以实现ASP时间格式化的函数分享,希望能代替可续的时间格式化函数 Kesion.CommonCls.asp 的1107行的函数DateFormat(科讯的这个函数一共是132行),精简之后代码只有10行或者在加几行就可以完全实现。10行代码132行代码加载速度一比较,大家都清楚其速度。



精简之后的函数:



' 函数名:DateTimeFormat


' 功 能:格式化时间


' 形 参:DateTime 时间


' 形 参:Format 时间格式(模型) 格式为 YY-MM-DD hh:ff:ss或者 YY年MM月DD日 或者 YY-MM或者【YY/MM/DD】或者[MM/DD]等都是时间格式或者模型


' 返回值:根据传递的模型返回模型格式的值。例如:【YY年MM月DD日 hh时ff分】=【2010年07月29日 12时27分】



点击查看原图
转载请注明本文地址:http://www.1366.me/aspjc/64.html


科讯的时间格式函数


'----------------------------------------------------------------------------------------------------------------------------
'函数名:DateFormat


'功 能:日期格式函数


'参 数: DateStr日期, Types转换类型 '----------------------------------------------------------------------------------------------------------------------------


Function DateFormat(DateStr, Types)


Dim DateString


If IsDate(DateStr) = False Then


DateFormat = "":Exit Function


End If


Select Case CStr(Types)


Case "0"


DateFormat = ""


Exit Function


Case 1,21,41


DateString=Year(DateStr) & "-" & Right("0" & Month(DateStr), 2) & "-" & Right("0" & Day(DateStr), 2)


if Types=21 then


DateString = "(" & DateString &")"

elseIf Types=41 then


DateString = "[" & DateString &"]"


end if


Case 2,22,42


DateString=Year(DateStr) & "." & Right("0" & Month(DateStr), 2) & "." & Right("0" & Day(DateStr), 2)


if Types=22 then
DateString = "(" & DateString &")"
elseIf Types=42 then
DateString = "[" & DateString &"]"
end if
Case 3,23,43
DateString=Year(DateStr) & "/" & Right("0" & Month(DateStr), 2) & "/" & Right("0" & Day(DateStr), 2)
if Types=23 then
DateString = "(" & DateString &")"
elseIf Types=43 then
DateString = "[" & DateString &"]"
end if
Case 4,24,44
DateString=Right("0" & Month(DateStr), 2) & "/" & Right("0" & Day(DateStr), 2) & "/" & Year(DateStr)
if Types=24 then
DateString = "(" & DateString &")"
elseIf Types=44 then
DateString = "[" & DateString &"]"
end if
Case 5,25,45
DateString = Year(DateStr) & "年" & Right("0" & Month(DateStr), 2) & "月"
if Types=25 then
DateString = "(" & DateString &")"
elseIf Types=45 then
DateString = "[" & DateString &"]"
end if
Case 6,26,46
DateString = Year(DateStr) & "年" & Right("0" & Month(DateStr), 2) & "月" & Right("0" & Day(DateStr), 2) & "日"
if Types=26 then
DateString = "(" & DateString &")"
elseIf Types=46 then
DateString = "[" & DateString &"]"
end if
Case 7,27,47
DateString = Right("0" & Month(DateStr), 2) & "." & Right("0" & Day(DateStr), 2) & "." & Year(DateStr)
if Types=27 then
DateString = "(" & DateString &")"
elseIf Types=47 then
DateString = "[" & DateString &"]"
end if
Case 8,28,48
DateString = Right("0" & Month(DateStr), 2) & "-" & Right("0" & Day(DateStr), 2) & "-" & Year(DateStr)
if Types=28 then
DateString = "(" & DateString &")"
elseIf Types=48 then
DateString = "[" & DateString &"]"
end if
Case 9,29,49
DateString = Right("0" & Month(DateStr), 2) & "/" & Right("0" & Day(DateStr), 2)
if Types=29 then
DateString = "(" & DateString &")"
elseIf Types=49 then
DateString = "[" & DateString &"]"
end if
Case 10,30,50
DateString = Right("0" & Month(DateStr), 2) & "." & Right("0" & Day(DateStr), 2)
if Types=30 then
DateString = "(" & DateString &")"
elseIf Types=50 then
DateString = "[" & DateString &"]"
end if
Case 11,31,51
DateString = Right("0" & Month(DateStr), 2) & "月" & Right("0" & Day(DateStr), 2) & "日"
if Types=31 then
DateString = "(" & DateString &")"
elseIf Types=51 then
DateString = "[" & DateString &"]"
end if
Case 12,32,52
DateString = Right("0" & Day(DateStr), 2) & "日" & Right("0" & Hour(DateStr), 2) & "时"
if Types=32 then
DateString = "(" & DateString &")"
elseIf Types=52 then
DateString = "[" & DateString &"]"
end if
Case 13,33,53
DateString = Right("0" & Day(DateStr), 2) & "日" & Right("0" & Hour(DateStr), 2) & "点"
if Types=33 then
DateString = "(" & DateString &")"
elseIf Types=53 then
DateString = "[" & DateString &"]"
end if
Case 14,34,54
DateString = Right("0" & Hour(DateStr), 2) & "时" & Minute(DateStr) & "分"
if Types=34 then
DateString = "(" & DateString &")"
elseIf Types=54 then
DateString = "[" & DateString &"]"
end if
Case 15,35,55
DateString = Right("0" & Hour(DateStr), 2) & ":" & Right("0" & Minute(DateStr), 2)
if Types=35 then
DateString = "(" & DateString &")"
elseIf Types=55 then
DateString = "[" & DateString &"]"
end if
Case 16,36,56
DateString = Right("0" & Month(DateStr), 2) & "-" & Right("0" & Day(DateStr), 2)
if Types=36 then
DateString = "(" & DateString &")"
elseIf Types=56 then
DateString = "[" & DateString &"]"
end if
Case 17,37,57
DateString = Right("0" & Month(DateStr), 2) & "/" & Right("0" & Day(DateStr), 2) &" " &Right("0" & Hour(DateStr), 2)&":"&Right("0" & Minute(DateStr), 2)
if Types=37 then
DateString = "(" & DateString &")"
elseIf Types=57 then
DateString = "[" & DateString &"]"
end if
Case Else
DateString = DateStr
End Select
DateFormat = DateString
End Function


大家看了之后,从运行的速度上来看到底谁的会加载快,速度快,效率高!

 
  支持(20) | 反对(21) 回到顶部顶端 回到底部底部
ihihih 当前离线

82

主题

0

广播

0

粉丝
添加关注
级别:学前班

用户积分:41 分
登录次数:19 次
注册时间:2010/7/28
最后登录:2010/8/28
ihihih 发表于:2010/7/29 22:37:01   | 只看该作者 查看该作者主题 沙发 
 
  支持(22) | 反对(21) 回到顶部顶端 回到底部底部
雨像眼泪 当前离线

291

主题

0

广播

0

粉丝
添加关注
级别:二年级

用户积分:525 分
登录次数:34 次
注册时间:2010/4/4
最后登录:2011/5/6
雨像眼泪 发表于:2010/7/29 22:37:20   | 只看该作者 查看该作者主题 藤椅 
能看懂点点.非常不错.我的沙发
 
做事讲求效率与耿直.!
  支持(15) | 反对(9) 回到顶部顶端 回到底部底部
pwcsoft 当前离线

261

主题

0

广播

0

粉丝
添加关注
级别:二年级

用户积分:2394 分
登录次数:106 次
注册时间:2009/12/31
最后登录:2012/11/1
pwcsoft 发表于:2010/7/29 23:22:28   | 只看该作者 查看该作者主题 板凳 
科汛在线考试系统(NET)
对不起,该用户所发的帖已全被锁定!
 
  支持(2) | 反对(4) 回到顶部顶端 回到底部底部
曾铃军 当前离线

119

主题

2

广播

0

粉丝
添加关注
级别:一年级

用户积分:295 分
登录次数:152 次
注册时间:2010/4/5
最后登录:2014/4/11
曾铃军 发表于:2010/7/29 23:51:55   | 只看该作者 查看该作者主题 报纸 
科汛智能建站系统
以下是引用 pwcsoft在2010-7-29 23:22:28的发言:

孩子别太过于追求明星,还没看清楚KS DateFormat功能和效果时别乱做对比,如果只是单纯的格式YY-MM-DD hh:ff:ss 一行代码即可。

如果非说二句,那么我只能说你的10行代码其实只是KS的select的一个case 6行代码就足矣。



请你提出他里面有的功能,这个10行代码的有那点无法实现再来说这个话,不经验证就这样说话,未免....

如果只要年月:time = DateTimeFormat(ByVal DateTime, "YY年MM月")

如果只要月日:time = DateTimeFormat(ByVal DateTime, "MM月DD日")

如果只要时分秒:time = DateTimeFormat(ByVal DateTime, "hh时ff分ss秒")

....

YY年MM月,MM月DD日,hh时ff分ss秒,MM/DD hh:ff:ss 这些就是模型,先思考一下吧看对不对吧。



如果说你是觉得只用 KS的select的一个case 6行代码就足矣 那么证明你还不太会灵活运用模型或者最大功能的发挥函数的价值,你仅仅看到了示例格式做了判决定义,这个函数的功能丰富了时间的格式,可以无限变化。
 
<a href=http://www.52-game.com title=单机游戏下载基地>单机游戏下载基地</a>—<a href=http://www.dacheng86.com title=seo培训>seo培训</a>—<a href=http://www.1366.me title=插件网>插件网</a>
  支持(3) | 反对(0) 回到顶部顶端 回到底部底部
孤风大虾 当前离线

1700

主题

7

广播

118

粉丝
添加关注
级别:高一年

用户积分:10218 分
登录次数:451 次
注册时间:2006/3/28
最后登录:2022/3/10
孤风大虾 发表于:2010/7/30 8:17:58   | 只看该作者 查看该作者主题 地板 
做在线知识付费 选科汛云开店
我不懂程序,但是对楼主的这种精神非常钦佩!
 
孤风自己开发了一套CMS系统,博采科讯的长处,去除了无关的功能,有兴趣的百度 FengCms
  支持(0) | 反对(0) 回到顶部顶端 回到底部底部
红星固始 当前离线

404

主题

0

广播

0

粉丝
添加关注
级别:四年级

用户积分:397 分
登录次数:32 次
注册时间:2010/6/17
最后登录:2011/2/15
红星固始 发表于:2010/7/30 8:39:32   | 只看该作者 查看该作者主题 7楼 
科汛在线商城系统(NET)
对这方面不是太懂,俺是学asp.net的
 
  支持(0) | 反对(0) 回到顶部顶端 回到底部底部
科汛官方 当前离线

47268

主题

145

广播

405

粉丝
添加关注
级别:管理员

用户积分:101604 分
登录次数:7935 次
注册时间:2006/12/7
最后登录:2023/12/14
科汛官方 发表于:2010/7/30 8:58:11   | 只看该作者 查看该作者主题 8楼 
科汛在线商城系统(NET)
官方早就想到你的做法,这个函数主要是供系统函数标签解释用的,但从第一个开发版本起,科汛为方便用户,这些格式是做好的,在做标签时直接让用户选择输出格式,如下图:



点击查看原图







保留原有代码,一方面保持程序升级的兼容性,另一方面,不需要用去记住YY年MM月,MM月DD日,hh时ff分ss秒,MM/DD hh:ff:ss,【MM-DD】,[MM-DD hh:ff] ,CMS不就是要方便用户吗?









你如果用过sql标签,就知道sql就是你说的实现方式



点击查看原图



对应的解释文件ks_cls/kesion.label.sqlcls.asp



  '取日期字段的值

  '参数说明:FieldValue-字段值,DateMB-输出日期模板

  Function Get_Date_Field(FieldValue,DateMB)

    IF Not IsDate(FieldValue) Then Get_Date_Field=FieldValue:Exit Function

    Get_Date_Field=Replace(DateMB,"YYYY",Year(FieldValue))

    Get_Date_Field=Replace(Get_Date_Field,"YY",Right("0" & Year(FieldValue), 2))

    Get_Date_Field=Replace(Get_Date_Field,"MM",Right("0" & Month(FieldValue), 2))

    Get_Date_Field=Replace(Get_Date_Field,"DD",Right("0" & Day(FieldValue), 2))

    Get_Date_Field=Replace(Get_Date_Field,"hh",Right("0" & hour(FieldValue), 2))

    Get_Date_Field=Replace(Get_Date_Field,"mm",Right("0" & minute(FieldValue), 2))

    Get_Date_Field=Replace(Get_Date_Field,"ss",Right("0" & second(FieldValue), 2))

  End Function









所以不要只对部分函数做分析,问题考虑是要全面的,特别是这么大的一个系统。这是就是为什么每个用户都能从当初的1.0版本顺利升级到最新版v6.5,官方的考虑是全面的。
 
KesionCMS,,
  支持(0) | 反对(0) 回到顶部顶端 回到底部底部
曾铃军 当前离线

119

主题

2

广播

0

粉丝
添加关注
级别:一年级

用户积分:295 分
登录次数:152 次
注册时间:2010/4/5
最后登录:2014/4/11
曾铃军 发表于:2010/7/30 9:11:02   | 只看该作者 查看该作者主题 9楼 
科汛在线商城系统(NET)
以下是引用 科汛官方在2010-7-30 8:58:11的发言:

官方早就想到你的做法,这个函数主要是供系统函数标签解释用的,但从第一个开发版本起,科汛为方便用户,这些格式是做好的,在做标签时直接让用户选择输出格式,如下图:

........

所以不要只对部分函数做分析,问题考虑是要全面的,特别是这么大的一个系统。这是就是为什么每个用户都能从当初的1.0版本顺利升级到最新版v6.5,官方的考虑是全面的。




就像5.5版本的,你们说数据可以承载多大多大,说缓存多么优秀多么优秀,结果生成4-5万数据就卡死了呢?结果是你们程序循环调用了缓存(这个当时是用打印调出来给你们看过的,你们最后不是没有话说,最后改进了吗),最后不是也改了吗?当时你们也是一个劲的说没有问题。



另外你说需要去记住这些模型,这个需要记忆吗?你想怎么设置格式就怎么设置格式(这个种核心其实是YY标签,MM标签,DD标签,hh标签,ff标签,ss标签),那么你的意思是记住你的0,1,2,3,4,5,6,7,8,9,10,....这些要好些?或者是用户自己去开发好些,为什么不让用户直接使用YY标签,MM标签,DD标签,hh标签,ff标签,ss标签标签呢?
 
<a href=http://www.52-game.com title=单机游戏下载基地>单机游戏下载基地</a>—<a href=http://www.dacheng86.com title=seo培训>seo培训</a>—<a href=http://www.1366.me title=插件网>插件网</a>
  支持(0) | 反对(0) 回到顶部顶端 回到底部底部
科汛官方 当前离线

47268

主题

145

广播

405

粉丝
添加关注
级别:管理员

用户积分:101604 分
登录次数:7935 次
注册时间:2006/12/7
最后登录:2023/12/14
科汛官方 发表于:2010/7/30 9:21:41   | 只看该作者 查看该作者主题 10楼 
科汛在线考试系统(NET)
再说单从上面官方的那个时间函数来说代码虽长,但执行效率不会比你写的那个低。原因在于这里用的是select,select只跳到符合条件里块里执行,


Case 1,21,41
DateString=Year(DateStr) & "-" & Right("0" & Month(DateStr), 2) & "-" & Right("0" & Day(DateStr), 2)
if Types=21 then
DateString = "(" & DateString &")"
elseIf Types=41 then
DateString = "[" & DateString &"]"
end if



当用户在系统函数标签里选择样式1时,只需要执行一句代码
  1. DateString=Year(DateStr) & "-" & Right("0" & Month(DateStr), 2) & "-" &
  2. Right("0" & Day(DateStr), 2)


有用户选择带括号或中括号输出时,只需执行两句
DateString=Year(DateStr) & "-" & Right("0" & Month(DateStr), 2) & "-" & Right("0" & Day(DateStr), 2)
if Types=21 then
DateString = "(" & DateString &")"
elseIf Types=41 then
DateString = "[" & DateString &"]"
end if




再者这些都不是访问数据库操作的,都是不占用资源的。

赞同你的认真学习进取态度,但也别太研牛角尖了!


站在别人原有的代码上分析做二次开发,当然是简单得多。






 
KesionCMS,,
  支持(0) | 反对(0) 回到顶部顶端 回到底部底部
<上一主题 | 下一主题 >
Powered By KesionCMS Version X1
厦门科汛软件有限公司 © 2006-2016 页面执行0.23499秒 powered by KesionCMS 9.0