0

我有一个 cfm 页面,其中包含一个包含日期的文本框。默认日期是"Now()",我可以编辑它。在同一页面中,我有一些“组合框”,当我更改选择时会刷新页面。问题是,如果我在文本框中写入,例如,"01/05/2013"刷新"05/01/2013"后会有"01/05/2013". 这里有一些代码:

<cfset myDate="">
<cfif isDefined('URL.date') and URL.date neq "">
<cfset myDate="#DateFormat(URL.date, 'dd/MM/yyyy')#">
<cfelse>
<cfset myDate="#DateFormat(Now(), 'dd/MM/yyyy')#">
</cfif>
<cfoutput>
<cfinput type="text" name="date" id="date" style="width:65px; text-align:center" class="input" value="#myDate#">
</cfoutput>

编辑:在javascript上,我使用以下代码保存日期:

var date=document.getElementById("date");

我刷新页面:

location.href("myPage.cfm?date="+date.value);

有什么帮助吗?谢谢。

4

3 回答 3

4

正如 Travis 所说,默认情况下 ColdFusion 使用美国格式处理日期mm/dd/yyyy。因此,您的示例01/05/2013转换为 2013 年 1 月 5 日。然后您将该日期重新dd/mm/yyyy格式化为05/01/2013. 然后,您的 JavaScript 会将这个新日期分配给您的表单字段。在重新提交时,现在的日期是05/01/2013美国格式的 2013 年 5 月 1 日。然后您重新格式化01/05/2013并 JavaScript 更新您的表单字段,依此类推。

由于您要处理非美国日期格式,您应该使用 Locale SpecificLSDateFormat()函数而不是DateFormat(). 使用它,您可以指定要使用的格式和语言环境。

lsDateFormat( myDate, "dd/mm/yyyy", "en_GB")
于 2013-05-20T13:24:20.223 回答
2

我相信这是因为 CF 想要默认使用月/日/年格式。当您键入 1/5/13 时,CF 认为您的意思是 2013 年 1 月 5 日,因此当您将dateformat其格式化为日/月/年时,您会得到 5/1/2013,当页面重新加载为 2013 年 5 月 1 日时, CF 现在认为您的意思是 2013 年 5 月 1 日。每次重新加载页面时,它都会来回切换。

如果您不希望 ColdFusion 弄乱您输入的日期,请不要应用dateFormatAdob​​e 文档,因为dateFormat建议在输入时格式化日期是一个坏主意。

注意: DateFormat 函数最适合用于格式化输出,而不是用于格式化输入。对于格式化输入,请改用日期/时间创建函数之一(例如 CreateDate)。

于 2013-05-20T13:05:27.920 回答
0

url.date 不是日期对象,它是一个字符串。因此这一行:

<cfset myDate="#DateFormat(URL.date, 'dd/MM/yyyy')#">

过度设计。所有你需要的是:

<cfset myDate = URL.date>

这个简单的更改应该可以解决您的问题。

于 2013-05-20T13:03:48.157 回答