2

我在几个约会方面遇到了问题,目前我正在逃避。

我有以下格式的 2 个日期字符串:dd-mm-yyyy. 所以例如

  • 日期1 =10-03-2013
  • 日期2 =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

4

3 回答 3

2

我发现月份和日期正在交换。我已经尝试过 createodbcdate() 之类的函数,看看这是否能解决问题,但仍然无法正常工作。

标准 CF 日期函数(如 CreateODBCDate、ParseDateTime 等)始终使用英语(美国)日期格式约定。所以日期字符串10-03-2013始终被视为 10 月 3 日。你很幸运能使用明确的日期字符串,例如15-03-2012. 显然没有第 15 个月,所以 CF 会自动交换它们。这就是为什么它似乎适用于一些非美国日期字符串,但不适用于其他日期字符串。

要解析区域设置敏感日期,请使用LSxxxxx@duncan 建议的日期函数。忽略验证,如下所示:

   <cfset dateObject = LSParseDateTime("10/03/2013", "pt_PT")>

请注意,根据文档,破折号即 dd-mm-yyyy在大多数其他语言环境中不是标准的。显然只有荷兰语(标准)和葡萄牙语(标准)。

此外,请务必cfqueryparam按照@Dan 的建议添加正确的日期类型。否则,它将默认为 typechar并可能导致语法错误。

于 2013-04-10T17:34:23.290 回答
1

不像 Leigh 的回答那样圆滑,但这也应该有效。

dateString = "10-03-2013";  // March 10 2013
dateObj = CreateDate(   ListLast(dateString, "-")
                        , ListGetAt(dateString, 2, "-")
                        , ListFirst(dateString, "-")
                    );

换句话说,将您的字符串视为连字符分隔的列表。

于 2013-04-10T19:13:18.457 回答
-1

您可以使用以下函数来创建日期:

CreateDate(year, month, day)

并使用以下功能根据您的需要对其进行格式化

DateFormat("date" [, "mask" ])
于 2013-04-15T13:41:34.483 回答