rau*_*ash 3 coldfusion date-format coldfusion-10 cfml
我使用DateFormat函数将日期转换为这种格式:yyyy-mm-dd.这是日期的原始格式:dd-mm-yyyy.以下是代码片段:
<cfset newdate = #DateFormat(Trim(mydate), "yyyy-mm-dd")# />
问题是我在不同的日期得到不同的结果.例如:
15-05-2013(dd-mm-yyyy)2013-05-15(yyyy-mm-dd)但是,如果我更改输入并且:
01-05-2013(dd-mm-yyyy)2013-01-05(yyyy-dd-mm)任何有关错误的帮助或指导都将受到高度赞赏.
我不同意另一个答案.问题的真正原因是DateFormat不是为处理非美国日期字符串而设计的.
标准CF日期函数始终使用美国日期解析规则.这意味着当您传入一个模糊日期字符串时01-05-2013,它会根据美国英语日期约定进行解析.在这种情况下,月份首先即"mm-dd-yyyy".所以结果将始终是1月5日,而不是5月1日.  
在某些情况下,你很幸运.使用字符串15-05-2013,显然没有第15个月,所以CF/java必须自动交换月和日,而不是抛出错误.这就是为什么它似乎dd-mm-yyyy正确处理一些日期字符串,而不是其他日期字符串.
如果要解析非美国日期字符串,则应使用LS(区域设置敏感)日期函数.但是,根据文档破折号,即"-"在大多数非美国语言环境中不是标准日期分隔符:仅限荷兰语和葡萄牙语(标准).因此,您需要更改分隔符或在解析日期时使用这两个区域设置中的一个:
        lsDateFormat( myDate, "yyyy-mm-dd", "pt_PT")
边注:
顺便说一下,DateFormat确实期待一个约会对象.但是,与CF中的大多数函数一样,它也足够灵活,可以接受日期字符串.这允许您将其用作惰性快捷方式,以便再次从日期字符串 =>日期对象 => 转换回(格式化)日期字符串.最好使用日期对象(你真的应该验证日期字符串),但这完全是另一个对话......
问题是DateFormat需要一个日期对象,并返回一个字符串.
你传给它一个字符串,而不是日期.你想要做的是首先把你的字符串(01-05-2013等)变成日期对象.
为此,我建议使用ParseDateTime或LSParseDateTime和/或LSDateFormat.
例如
<cfset originalDateString = "01-05-2013">
<!--- turn that into a Date --->
<cfset dateObject = ParseDateTime(originalDateString)>
<cfset newdateString = DateFormat(dateObject, "yyyy-mm-dd")>
或者,如果您知道您的字符串始终采用dd-mm-yyyy格式,则可以自己解析字符串,例如将其视为由连字符分隔的列表.
<cfset dd = listFirst(originalDateString, "-")>
<cfset mm = listGetAt(originalDateString, 2, "-")>
<cfset yy = listLast(originalDateString, "-")>
| 归档时间: | 
 | 
| 查看次数: | 5091 次 | 
| 最近记录: |