【问题标题】:Cannot pass datetime from value field within the jquery无法从 jquery 中的值字段传递日期时间
【发布时间】:2014-01-18 01:26:44
【问题描述】:

我有这个代码每半小时添加一次文本框 这是的截图

我标记的是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中的列是日期时间。

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

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>

【问题讨论】:

    标签: javascript mysql datetime


    【解决方案1】:

    您需要在隐藏输入中的值周围加上引号。否则,该属性在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 或服务器程序中或在 SQL 中使用STR_TO_DATE 函数将日期转换为这种格式。

    您得到错误时间的原因是您的表单有多个 &lt;input type="hidden" name="time" value="XXX"/&gt; 元素。当您提交表单时,只会使用第一个表单。

    您应该更新现有的,而不是每次都附加一个新的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);
    

    【讨论】:

    • 有没有办法在 mysql 中转换和使用它?这也是我想用第二种方式做的另一个原因,正如我在上面的问题中提到的那样
    • 在这两种方式中,前一个日期都过去了,我不知道如何解决这个问题……你的方法毫无疑问是有效的。我刚刚尝试过
    • 你还没有发布提交给服务器的代码,我怎么知道它做错了什么?
    • 11:30 是第一次,不是上次。这可能是出了什么问题的线索。
    • 不,实际上有 6 个用户。第一个用户在 11:30,第二个用户在 12:00 等。然后在 14:30,用户 1 回来并输入。但不管他14:30 的类型将作为 11:30 传递。与 user2 类似,无论他在 15:00 键入什么,都会作为 12:00 传递。
    猜你喜欢
    • 2015-10-20
    • 1970-01-01
    • 1970-01-01
    • 2015-08-15
    • 2012-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-01
    相关资源
    最近更新 更多