coldfusion中的日期问题

coldfusion中的日期问题,coldfusion,Coldfusion,我有一份报告,其日期选择如下所示。首次加载报告时,它将显示当月的数据,即从{ts'2014-06-01 00:00:00}到{ts'2014-07-01 00:00:00};页面上所有查询的范围。当我从下拉列表中选择一个日期并提交页面时,查询仍然将开始和结束日期作为6/1到7/1,而不是选择的月份。我试着调试它,但仍然无法让它工作。有什么建议吗 我已经更新了我的表格如下。我想第一个单选按钮被选中的第一页加载,我只是使其他选择空点击单选按钮。是否有办法保存所选内容并仅显示所选条件的结果?请提出建议

我有一份报告,其日期选择如下所示。首次加载报告时,它将显示当月的数据,即从{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月。您如何确定他们所做的选择?您需要一种方法来确定他们是否选择了月/年或开始日期/结束日期所有月/日、开始日期和结束日期都是在提交表单时同时设置的……因此上述方法将无法工作,因为所有条件同时为真实际上您的权利,您的表单毫无意义。服务器如何知道用户使用了表单的哪一部分。您将需要添加一些附加数据点,如单选按钮以选择搜索类型。其原始查询的优点是可以工作。使用每月最后一天的方法不会,甚至可能会跳过一天。但是,正如其他人提到的,真正的问题是。