如何根据开始和结束时间值创建动态表?

时间:2015-12-04 20:28:09

标签: javascript jquery coldfusion

我有一个关于根据从一个页面到另一个页面的传递值创建动态表格的问题。在第一页上,我定义了开始时间,结束时间和增量间隔。因此,在我选择开始时间之后,让我们说上午8:00并选择会议长度15分钟,结束时间将根据开始时间以15分钟的间隔创建。示例结束时间:上午8:15,上午8:30,8:45,...依此类推,直到我的最后一个值不能超过晚上9:00。我可以在结束时间中选择任何这些值。在我选择这三个值开始,结束和会议长度后,我点击提交,将我带到第二页。在这个页面上,我想根据传递的值创建我的表。这是我到目前为止的代码:

<form name="myForm" id="myForm" method="post" action="SeconfPage.cfm">
        <fieldset>
            <table>
            <tr>
                <th>Date</th>
                <td><input type="date" id="datepicker" name="datepicker"/></td>
            </tr>
            <tr>
                <th>Start Time</th>
                <td><input type="text" id="stime" name="stime"/></td>
            </tr>
            <tr>
                <th>Length of meeting</th>
                <td>
                <select name="meeting" id="meeting">
                    <option value="">--Select length--</option>
                </select>
                </td>
            </tr>
            <tr>
                <th>End Time</th>
                <td><input type="text" id="etime" name="etime"></td>
            </tr>
            <tr>
                <td><input type="button" value="Create" onClick="getTable()"></td>
            </tr>
        </table>
    </fieldset>
</form>

$(function() {
        for (var i = 5; i <= 60; i += 5) {
            $('#meeting').append('<option value="' + i + '">' + i + '   min' + '</option>');
        }

        function setEndTime() {
            var meetingLength = parseInt($('#meeting').find('option:selected').val() || 0);
            var selectedTime = $('#stime').timepicker('getTime');
            if(selectedTime == null || selectedTime == ""){
                alert("Please select the start time");
            }else{
                selectedTime.setMinutes(selectedTime.getMinutes() + parseInt(meetingLength, 10), 0);
                $('#etime').timepicker('option', 'minTime', selectedTime);
                $('#etime').timepicker('setTime', selectedTime);
            }
        }

        $('#stime').timepicker({
            'timeFormat':'h:i a',
            'minTime': '8:00 AM',
            'maxTime': '9:00 PM',
            'step': 30
          }).on('changeTime', function () {
            setEndTime();
        });

        var count = 0;
        $('#etime').timepicker({
            'timeFormat':'h:i a' + ' (Slot '+count+')',
            'minTime': '8:00 AM',
            'maxTime': '9:00 PM',
            'step': function () {
                var val = parseInt($('#meeting').find('option:selected').val());
                count++
                return val;
            },

        });


        $('#meeting').bind('change', function () {
            setEndTime();
        });
    });

    function getTable(){
            document.myForm.submit();
    }

我正在试图弄清楚如何以及在第二页上创建表格的最佳方式是什么。所有值都从我的表单传递。例如,我在第二页上有:

start time: 8:00am
end time: 5:00pm
meeting length: 20min

我的想法是创建一个像这样的for循环:

for(var i=stime; i<=etime; i+=meeting){
   var tbl = "<tr><td>"+stime+"-"+i+"</td></tr>"
}

这样的东西会根据增量给出开始时间和下一个值。另外,一旦创建表,在MySQL数据库中存储此表的最佳方法是什么?我仍然没有弄清楚如何让它工作。如果有人能给我一个暗示什么是最好的方式,如果我走在正确的道路上。

提前致谢。

3 个答案:

答案 0 :(得分:1)

这有点像你要找的,它是一个创建的表,并使用另一个表数据填充

https://github.com/TheOriginalDeveloper/Dynamic-and-responsive-table

答案 1 :(得分:1)

我会做出一些假设......在这些会议时段会发生某些事情,并且会议通常是在某个日期的时间(因此只是一个数据库表中的单个日期时间。)

同意Leigh,您想要做什么决定数据结构,然后使用它的查询来构建您的数据显示(在本例中为表格)。因此,如果您最终需要存储的数据是

dateTimeStamp                 ¦ meetingID     ¦  meetingSlotData
{ts '2015-07-04 20:00:00'}    ¦ 1             ¦  Peter Pan
{ts '2015-07-04 20:15:00'}    ¦ 1             ¦  Wendy

首先使用您的日期时间选择器填充数据表(暂时只手动执行)

 <cfset newQuery = queryNew("dateTimeStamp, meetingID, meetingSlotData","Timestamp, Integer, VarChar")>
 <cfset queryAddRow(newQuery, 2)>
 <cfset querySetCell(newQuery, "dateTimeStamp", {ts '2015-07-04 20:00:00'}, 1)>
 <cfset querySetCell(newQuery, "meetingID", 1, 1)>
 <cfset querySetCell(newQuery, "dateTimeStamp", {ts '2015-07-04 20:10:00'}, 2)>
 <cfset querySetCell(newQuery, "meetingID", 1, 2)>

 <cfdump var="#newQuery#">

然后查询数据以构建表

<cfquery name="getMeeting">
    SELECT *
    FROM meetings
    WHERE id = 1
</cfquery>

<table>
<cfoutput query = "getMeeting">
    <tr><td>#dateTimeStamp#</td><td>#meetingID#</td></tr>
</cfoutput> 
</table>

答案 2 :(得分:1)

请尝试以下方法(在第2页上创建表格):

<cfscript>
  //existence and type checking
  param name="FORM.datepicker" type="date";
  param name="FORM.sTime" type="time";
  param name="FORM.eTime" type="time";
  param name="FORM.meeting" type="range" min=5 max=60;//minutes
  //create currentTimeSlotBegin and lastTimeSlotBegin for cfloop
  currentTimeSlotBegin = createDateTime(year(FORM.datepicker), month(FORM.datepicker), day(FORM.datepicker), hour(FORM.sTime), minute(FORM.sTime), 0);//this will be incremented, within cfloop, for each time slot
  lastTimeSlotEnd = createDateTime(year(FORM.datepicker), month(FORM.datepicker), day(FORM.datepicker), hour(FORM.eTime), minute(FORM.eTime), 0);//used only for creating lastTimeSlotBegin below
  lastTimeSlotBegin = dateAdd("n", FORM.meeting*-1, lastTimeSlotEnd);//subtract meeting length to get beginning of last time slot
</cfscript>
<table>
  <tr>
    <th>Time Slots for <cfoutput>#dateFormat(FORM.datepicker, "ddd, mmm dd, yyyy")#</cfoutput></th>
  </tr>
  <cfloop condition="currentTimeSlotBegin lte lastTimeSlotBegin">
    <cfset currentTimeSlotEnd = dateAdd("n", FORM.meeting, currentTimeSlotBegin)>
    <tr>
      <td><cfoutput>#timeFormat(currentTimeSlotBegin, "hh:nn tt")#-#timeFormat(currentTimeSlotEnd, "hh:nn tt")#</cfoutput></td>
    </tr>
    <cfset currentTimeSlotBegin = dateAdd("n", FORM.meeting, currentTimeSlotBegin)>
  </cfloop>
</table>

谢谢!,

-Aaron