无法从jquery中的value字段传递datetime

时间:2013-12-31 04:36:16

标签: javascript mysql datetime

我有这个代码,每隔半小时就会添加一个文本框 这是enter image description here

的屏幕截图

我标记的是yo变量。 这是代码的一部分

<script type="text/javascript">
$(document).ready(function(){
    document.getElementById('time').value = yo;
    var data=$('#data').val();
    var counter = 1;
    var d=new Date();
    var i;
    var newdate= new Array();
    newdate=$('#newdate').val();
    newdate= newdate.replace("[", "").replace("]", "");
    var newdate1=newdate.split(",");
    var a=newdate1[0];
    var b=newdate1[1];
    var c=newdate1[2];
    var dateString=$('#strtime').val();
    var dateString2=$('#endtime').val();
    var dateString1=$('#date').val();
    var d1 = new Date(dateString1+" "+dateString);
    var d5= new Date(dateString1+" "+dateString2);
    var yo=d1;
    var d3=new Date(dateString1+" "+a);
    var d4=new Date(dateString1+" "+b);

    function msToTime(Milliseconds)
    {
        var d = new Date(Milliseconds);
        return [d.getHours(), d.getMinutes(), d.getSeconds()].join(':');
    }
    setInterval(function() {
        var xtime=null;
        if(yo.getTime() <= d.getTime() && yo.getTime() <= d5.getTime()){
            if( (d1.getTime() == d3.getTime()) || (d1.getTime() == d4.getTime())){
                var freq=$('#freq').val();
                freq=parseInt(freq);
                var newTextBoxDiv = $(document.createElement('div')).attr("id", 'TextBoxDiv' + counter);
                newTextBoxDiv.after().html('<div><label style="float:left;">'+yo+'</label></div><textarea name="textbox' + counter + '" id="textbox' + counter + '" ></textarea><input type="hidden" id="time" name="time" value='+yo+'/>');
                newTextBoxDiv.appendTo("#TextBoxesGroup");
                yo.setMinutes(yo.getMinutes() + freq);
            }
            counter++;
        }
    },1000);
});
</script>

你可以在屏幕截图中看到yo值出现在标签中。但是当我在14:30的文本框中键入内容并将其发送到数据库时,出于某种原因只有fri被传递并且我得到一个mysql错误

com.mysql.jdbc.MysqlDataTruncation: Data truncation: Incorrect datetime value: 'Fri' for column 'time' at row 1

mysql中的列是datetime。

我也尝试过时间栏。我使用的代码是相同的,除了这一行

newTextBoxDiv.after().html('<div><label style="float:left;">'+yo+'</label></div><textarea  readonly="readonly" name="textbox' + counter + '" id="textbox' + counter + '" value="'+msToTime(yo.getTime())+'0" />');

在隐藏字段的值中我曾经花了几毫秒并转换为只有时间并传递给数据库。时间过去但不是14:30而是11:30。第一次。

请向我提供有关其中任何一方的建议。

更新

<%
java.util.Date now = new java.util.Date();
String DATE_FORMAT = "yyyy-MM-dd hh:mm:ss";
SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT);
String date = sdf.format(now) ;
String time=request.getParameter("time");
String data0=request.getParameter("textbox1");
String data1=request.getParameter("textbox2");
String data2=request.getParameter("textbox3");
String data3=request.getParameter("textbox4");
String data4=request.getParameter("textbox5");
String data5=request.getParameter("textbox6");
String data6=request.getParameter("textbox7");
String data7=request.getParameter("textbox8");
String data8=request.getParameter("textbox9");
String data9=request.getParameter("textbox10");
String data10=request.getParameter("textbox11");
String data11=request.getParameter("textbox12");
String data12=request.getParameter("textbox13");
String data13=request.getParameter("textbox14");
String user = session.getAttribute("par1").toString();
Connection con=null;
String message="";
try{
Class.forName("com.mysql.jdbc.Driver");
con = DriverManager.getConnection("jdbc:mysql://localhost:3306/gla", "root", "root");
Statement st=con.createStatement();
String sql = "INSERT INTO user_data (date,user,data0,data1,data2,data3,data4,data5,data6,data7,data8,data9,data10,data11,data12,data13,time) values (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
PreparedStatement statement = con.prepareStatement(sql);
statement.setString(1, date);
statement.setString(2, user);
statement.setString(3, data0);
statement.setString(4, data1);
statement.setString(5, data2);
statement.setString(6, data3);
statement.setString(7, data4);
statement.setString(8, data5);
statement.setString(9, data6);
statement.setString(10, data7);
statement.setString(11, data8);
statement.setString(12, data9);
statement.setString(13, data10);
statement.setString(14, data11);
statement.setString(15, data12);
statement.setString(16, data13);
statement.setString(17, time);
int row = statement.executeUpdate();
if (row > 0) {
    message="Edit";
}

} 
catch (SQLException ex) 
{
message = "ERROR: " + ex.getMessage();
ex.printStackTrace();
} 
finally {
if (con != null) {
    // closes the database connection
    try {
        con.close();
    } catch (SQLException ex) {
        ex.printStackTrace();
    }
}
}
%>
</body>
</html>

1 个答案:

答案 0 :(得分:3)

您需要在隐藏输入中的值周围加上引号。否则,该属性将在Fri之后的空格处结束。

newTextBoxDiv.after().html('<div><label style="float:left;">'+yo+'</label></div><textarea name="textbox' + counter + '" id="textbox' + counter + '" ></textarea><input type="hidden" name="time" value="'+yo+'"/>');

但是,这可能也行不通。我不认为MySQL会以您输入的格式了解日期。它希望它们采用2013-12-27格式,而不是Fri Dec 27 2013格式。您需要在Javascript或服务器程序中或使用STR_TO_DATE函数的SQL中将日期转换为此格式。

您错误的时间是因为您的表单有多个<input type="hidden" name="time" value="XXX"/>元素。提交表单时,只会使用第一个表单。

您不应每次都添加新的time输入,而应更新现有的输入。将id="time"添加到原始隐藏输入,然后执行:

$("#time").value(yo);

setInterval函数中。它应该是:

setInterval(function() {
    var xtime=null;
    if(yo.getTime() <= d.getTime() && yo.getTime() <= d5.getTime()){
        if( (d1.getTime() == d3.getTime()) || (d1.getTime() == d4.getTime())){
            var freq=$('#freq').val();
            freq=parseInt(freq);
            var newTextBoxDiv = $("<div>", { "id": 'TextBoxDiv' + counter });
            newTextBoxDiv.after().html('<div><label style="float:left;">'+yo+'</label></div><textarea name="textbox' + counter + '" id="textbox' + counter + '" ></textarea>');
            newTextBoxDiv.appendTo("#TextBoxesGroup");
            $("#time").val(yo);
            yo.setMinutes(yo.getMinutes() + freq);
        }
        counter++;
    }
},1000);