在ColdFusion中解析日期

问题描述:

我有一个以dd-mm-yyyy格式存储的日期。我希望将日期,日期和年份存储为单个变量,同时删除任何前导零(例如“09-09-2010”存储为2010年9月9日)。在ColdFusion中解析日期

我试图使用this page上的代码以破折号分隔日期,但它引发表达式错误。

有些人,当与 面临的问题,认为“我知道,我将使用 正则表达式。”现在他们有 两个问题。

Coding Horror: Regular Expressions: Now You Have Two Problems

调查ColdFusion的功能month(日期),day(日期)和year(日期)。

更新:只要CF可以变成日期,就可以将字符串传递给这些函数。

当你说你有个约会

存储格式为DD-MM-YYYY

你确定你是不是跟你的数据库UI就是这样,这混淆将它呈现给你,还是你实际上以这种格式存储日期(例如,通过将它写入文本文件或varchar列而不是DateTime列)?

我问的原因是,如果日期作为日期存储在数据库中,那么CF将它表示为日期,而不管它在SQL Management Studio中的显示方式如何。如果是这种情况,那么您可以使用DatePart(“datepart”,“date”)简单地分割零件。 如果你有一个文本格式的日期(如从表单提交或因为它已被存储为纯文本),那么你应该能够使用LSParseDateTime()解析它到一个DateTime对象,然后使用DatePart( ...)方法来拆分零件。

http://livedocs.adobe.com/coldfusion/8/htmldocs/help.html?content=functions_c-d_30.html

(抱歉,不能的URL等功能后,由于缺乏那么点的!)

查找有关此文档。另外,如果您使用的是SQL2005(或更高版本),那么您可以在日期字段上创建计算列,以便在数据库级别拆分日期,年份和月份。我想我会提到这一点,以防万一它证明有用。

Steve

+0

+1够公平,datepart()是我考虑的另一种可能性。我猜测提问者的问题是对CF不熟悉,并且它有大量的内置日期操作函数 - 因此是正则表达式方法。 – orangepips 2010-12-13 13:48:38

如果您使用的格式是字符串,则不需要正则表达式。

myDate = "13-12-2010"; 
theDay = listGetAt(myDate,1,"-"); 
theMonth = listGetAt(myDate,2,"-"); 
theYear = listGetAt(myDate,3,"-"); 

使用val()函数也会丢弃前导零,如果有的话。