coldfusion中的日期问题
我有一份报告,其日期选择如下所示。首次加载报告时,它将显示当月的数据,即从{ts'2014-06-01 00:00:00}到{ts'2014-07-01 00:00:00};页面上所有查询的范围。当我从下拉列表中选择一个日期并提交页面时,查询仍然将开始和结束日期作为6/1到7/1,而不是选择的月份。我试着调试它,但仍然无法让它工作。有什么建议吗 我已经更新了我的表格如下。我想第一个单选按钮被选中的第一页加载,我只是使其他选择空点击单选按钮。是否有办法保存所选内容并仅显示所选条件的结果?请提出建议coldfusion中的日期问题,coldfusion,Coldfusion,我有一份报告,其日期选择如下所示。首次加载报告时,它将显示当月的数据,即从{ts'2014-06-01 00:00:00}到{ts'2014-07-01 00:00:00};页面上所有查询的范围。当我从下拉列表中选择一个日期并提交页面时,查询仍然将开始和结束日期作为6/1到7/1,而不是选择的月份。我试着调试它,但仍然无法让它工作。有什么建议吗 我已经更新了我的表格如下。我想第一个单选按钮被选中的第一页加载,我只是使其他选择空点击单选按钮。是否有办法保存所选内容并仅显示所选条件的结果?请提出建议
<script>
function makeChoice() {
var obj1 = document.getElementById('month_dt')
var obj2 = document.getElementById('start_date')
var obj3 = document.getElementById('end_date')
if (document.getElementById('but1').checked) {
obj2.value = '';
obj3.value = '';
}
else if (document.getElementById('but2').checked) {
obj1.value = '';
}
}
</script>
<form name="month_year" method="get">
<div>
<table>
<tr>
<th align="right">
<input type="radio" name="datesel" value="1" id="but1" onClick="return makeChoice();"/>
Month/Year:</th>
<td align="left">
<select name="month_dt" id="month_dt">
<option value="">---Select one---</option>
<cfloop from="0" to="#diff_month_cnt#" index="ii">
<cfset temp_dt = dateAdd("m", -1 * ii, today) />
<cfset temp_dt = createDate(year(temp_dt), month(temp_dt), 1) />
<cfset isselected = "" />
<cfif temp_dt EQ the_month_dt>
<cfset isselected = "selected" />
</cfif>
<option value="#dateFormat(temp_dt, 'mm/dd/yyyy')#" #isselected#>#dateFormat(temp_dt, "mmmm yyyy")#</option>
</cfloop>
</select>
</td>
</tr>
<tr><td colspan="2" align="center"><em>- or -</em></td></tr>
<tr>
<th align="right"> <input type="radio" name="datesel" value="2" id="but2" onClick="return makeChoice();"/>Start Date:</th>
<td>
<input id="start_date" type="text" name="start_date" <cfif isdate(url.start_Date)>value="#dateFormat(url.start_date, 'mm/dd/yyyy')#"</cfif> size="10" maxlength="10" autocomplete="off" />
</td>
</tr>
<tr>
<th align="right">End Date:</th>
<td>
<input id="end_date" type="text" name="end_date" <cfif isdate(url.end_Date)>value="#dateFormat(url.end_date, 'mm/dd/yyyy')#"</cfif> size="10" maxlength="10" autocomplete="off" />
</td>
</tr>
<input type="submit" value=" OK " />
<cfif isDate(url.month_dt) and url.datesel eq 1>
<cfset begin_dt = createDate(year(month_dt), month(month_dt), 1) />
<cfset end_dt = dateAdd("m", 1, begin_dt) />
<cfelseif isDate(url.start_date) AND isDate(url.end_date) and url.datesel eq 2 >
<cfset begin_dt = url.start_date />
<cfset end_dt = url.end_date />
</cfif>
<cfset the_month_dt = createDate(year(begin_dt), month(begin_dt), 1) />
在查询中,如
1) WHERE q.quizdate >= <cfqueryparam cfsqltype="CF_SQL_DATE" value="#the_month_dt#" />
AND q.quizdate < <cfqueryparam cfsqltype="CF_SQL_DATE" value="#dateAdd('m', 1, the_month_dt)#" />
2) WHERE r.create_dt >= <cfqueryparam cfsqltype="CF_SQL_DATE" value="#begin_dt#" />
AND r.create_dt < <cfqueryparam cfsqltype="CF_SQL_DATE" value="#end_dt#" />
您需要更改以下代码:
<cfif isDate(url.month_dt)>
<cfset begin_dt = createDate(year(month_dt), month(month_dt), 1) />
</cfif>
<cfif isDate(url.start_date)>
<cfset begin_dt = url.start_date />
</cfif>
<cfset end_dt = dateAdd("m", 1, begin_dt) />
<cfif isDate(url.end_date)>
<cfset end_dt = url.end_date />
</cfif>
将是:
<cfif isDate(url.month_dt)>
<cfset begin_dt = createDate(year(month_dt), month(month_dt), 1) />
<cfset end_dt = dateAdd("m", 1, begin_dt) />
<cfelseif isDate(url.start_date) AND isDate(url.end_date)>
<cfset begin_dt = url.start_date />
<cfset end_dt = url.end_date />
</cfif>
使用DaysInMonth查找月份中的最后一个日期。由于问题中给出了更多的信息,我的答案有点修改。当用户选择按月选择时,需要禁用并清除开始/结束表单字段中的值,反之亦然。否则,用户可能会感到困惑。将代码放在表单之前,以获取用户选择的开始/结束日期。最终开始/结束日期为开始日期和结束日期
<cfset thisMonth = createDate(year(now()), month(now()), 1) />
<cfparam name="url.month_dt" default="" />
<cfparam name="url.start_date" default="" />
<cfparam name="url.end_date" default="" />
<cfparam name="bRadioMonth" default="" />
<cfparam name="bRadioStartEnd" default="" />
<cfif len(url.month_dt) AND isDate(url.month_dt)>
<cfset begin_dt = createDate(year(url.month_dt), month(url.month_dt), 1) />
<cfset end_dt = createDate(year(begin_dt), month(begin_dt), DaysInMonth(begin_dt)) />
<!--- Disable form fields start_date and end_date --->
<cfset bFieldMonth = "">
<cfset bFieldStartEnd = "disabled">
<cfset bRadioMonth = "checked">
<cfelseif len(url.start_date) AND len(url.end_date)
AND isDate(url.start_date) AND isDate(url.end_date)>
<cfset begin_dt = createDate(year(url.start_date), month(url.start_date), day(url.start_date)) />
<cfset end_dt = createDate(year(url.end_date), month(url.end_date), day(url.end_date)) />
<!--- Disable form field month_dt --->
<cfset bFieldMonth = "disabled">
<cfset bFieldStartEnd = "">
<cfset bRadioStartEnd = "checked">
<cfelse>
<cfset begin_dt = thisMonth />
<cfset end_dt = createDate(year(begin_dt), month(begin_dt), DaysInMonth(begin_dt)) />
<!--- Default to disable form fields start_date and end_date --->
<cfset bFieldMonth = "">
<cfset bFieldStartEnd = "disabled">
<cfset bRadioMonth = "checked">
</cfif>
javascript:
<script>
function makeChoice() {
var fieldMonth = document.getElementById('month_dt');
var fieldStart = document.getElementById('start_date');
var fieldEnd = document.getElementById('end_date');
if (document.getElementById('but1').checked) {
fieldMonth.disabled = false;
fieldStart.disabled = true;
fieldEnd.disabled = true;
fieldStart.value = '';
fieldEnd.value = '';
}
else if (document.getElementById('but2').checked) {
fieldMonth.options[0].selected = true;
fieldMonth.disabled = true;
fieldStart.disabled = false;
fieldEnd.disabled = false;
}
}
</script>
如果表单已提交,则返回选定的开始/结束日期并运行查询:
<cfoutput>
Selected Start Date: #dateFormat(begin_dt, 'mm/dd/yyyy')# End Date: #dateFormat(end_dt, 'mm/dd/yyyy')#
</cfoutput>
<cfif isdefined("form.submit")>
<!---
Run Query.
1) WHERE q.quizdate >= <cfqueryparam cfsqltype="CF_SQL_DATE" value="#begin_dt#" />
AND q.quizdate < <cfqueryparam cfsqltype="CF_SQL_DATE" value="#DATEADD('d',1,end_dt)#" />
2) WHERE r.create_dt >= <cfqueryparam cfsqltype="CF_SQL_DATE" value="#begin_dt#" />
AND r.create_dt < <cfqueryparam cfsqltype="CF_SQL_DATE" value="#DATEADD('d',1,end_dt)#" />
--->
</cfif>
当您在表单提交中使用get方法时,您提交表单时URL中包含的日期是什么?是的,使用get方法…在URL中获取月日、开始日和结束日…是的,但URL参数中的值是什么?URL参数正确…如果我将月/年更改为2014年4月,月日为2014年1月4日,开始日期为2014年1月6日,结束日期为2014年1月7日。但是,当查询运行时,参数是开始日期和结束日期…而不是2014年4月。您如何确定他们所做的选择?您需要一种方法来确定他们是否选择了月/年或开始日期/结束日期所有月/日、开始日期和结束日期都是在提交表单时同时设置的……因此上述方法将无法工作,因为所有条件同时为真实际上您的权利,您的表单毫无意义。服务器如何知道用户使用了表单的哪一部分。您将需要添加一些附加数据点,如单选按钮以选择搜索类型。其原始查询的优点是可以工作。使用每月最后一天的方法不会,甚至可能会跳过一天。但是,正如其他人提到的,真正的问题是。