我有一个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);
任何帮助?感谢。
答案 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
Adobe文档dateFormat
建议输入格式化日期是一个坏主意。
注意: DateFormat函数最适合用于格式化输出,而不是 用于格式化输入。要格式化输入,请使用日期/时间之一 创建函数(例如,CreateDate)。
答案 2 :(得分:0)
url.date不是日期对象,它是一个字符串。因此这一行:
<cfset myDate="#DateFormat(URL.date, 'dd/MM/yyyy')#">
是过度设计的。您所需要的只是:
<cfset myDate = URL.date>
这个简单的改变可以解决你的问题。