ColdFusion - DateFormat在刷新页面上反转日期

时间:2013-05-20 12:37:45

标签: coldfusion date-format

我有一个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);

任何帮助?感谢。

3 个答案:

答案 0 :(得分: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会更新您的表单字段,依此类推。

由于您希望处理非美国日期格式,因此您应使用特定于区域设置的LSDateFormat()函数而不是DateFormat()。有了它,您可以指定要使用的格式和区域设置。

lsDateFormat( myDate, "dd/mm/yyyy", "en_GB")

答案 1 :(得分:2)

我认为这是因为CF希望默认使用月/日/年格式。当您键入1/5/13 CF时认为您的意思是2013年1月5日,所以当您使用dateformat将其格式化为日/月/年时,您将获得5/1/2013,当页面重新加载时为5 / 1/2013,CF现在认为你的意思是2013年5月1日。每次你重新加载页面时,它会来回交换。

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

  

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

答案 2 :(得分:0)

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

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

是过度设计的。您所需要的只是:

<cfset myDate = URL.date>

这个简单的改变可以解决你的问题。