我遇到了几个日期的问题,目前无法解决这个问题。
我有以下格式的2个日期字符串:dd-mm-yyyy
。例如,
10-03-2013
15-03-2013
我需要在以下查询中使用这些日期:
<cfquery name="qry1" datasource="#getDSN()#">
SELECT
DOCUMENT_NUMBER
FROM
MY TABLE
WHERE
DATE_ORDER_ENTER
BETWEEN
<cfqueryparam value="#DATE1#" maxlength="10">
AND
<cfqueryparam value="#DATE2#" maxlength="10">
</cfquery>
我遇到的问题是将这些日期字符串转换为实际日期。我发现月和日正在交换。我尝试了createODBCDate()
之类的函数来查看是否能解决问题,但它仍然无效。有没有人有解决方案?
我使用的是CF9.01和Oracle 10g。
非常感谢, JC
答案 0 :(得分:2)
我发现月和日正在交换。我试过了 像createodbcdate()这样的函数来查看这是否可以解决问题 但仍然没有工作。
标准CF日期函数如CreateODBCDate,ParseDateTime,etecetera 始终使用English (U.S.) date formatting conventions。因此,日期字符串10-03-2013
将始终视为10月3日。对于像15-03-2012
这样的非模糊日期字符串,你很幸运。显然没有第15个月,因此CF会自动交换它们。这就是似乎使用某些非美国日期字符串而不是其他字符串的原因。
要解析区域设置敏感日期,请使用LSxxxxx
日期函数作为@duncan建议。忽略验证,如下所示:
<cfset dateObject = LSParseDateTime("10/03/2013", "pt_PT")>
请注意,根据大多数其他语言环境中的dashes ie dd-mm-yyyy are NOT standard文档。显然只有荷兰语(标准)和葡萄牙语(标准)。
此外,请务必将@Dan建议的正确日期类型添加到cfqueryparam
。否则,它将默认键入char
并可能导致语法错误。
答案 1 :(得分:1)
不像Leigh的回答那么光滑,但这也应该有用。
dateString = "10-03-2013"; // March 10 2013
dateObj = CreateDate( ListLast(dateString, "-")
, ListGetAt(dateString, 2, "-")
, ListFirst(dateString, "-")
);
换句话说,将字符串视为连字符分隔列表。
答案 2 :(得分:-1)
您可以使用以下功能创建日期:
CreateDate(year, month, day)
并使用以下函数根据需要对其进行格式化
DateFormat("date" [, "mask" ])