coldfusion中的日期问题

时间:2014-06-01 18:49:41

标签: 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#" />

enter image description here

2 个答案:

答案 0 :(得分:1)

您需要更改以下代码:

<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>

答案 1 :(得分:0)

使用DaysInMonth查找月中的最后日期。随着问题中给出的信息越来越多,我的答案会有所改变。当用户选择按月选择时,您需要禁用和清除“开始/结束”表单字段中的值,反之亦然。否则,用户可能会感到困惑。将代码放在表单之前以获取用户选择的开始/结束日期。最终的开始/结束日期是begin_dt和end_dt

<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>
相关问题