在mySQL中存储javascript Date()

时间:2011-05-18 11:38:44

标签: php javascript mysql

我目前有一个javascript变量,它记录当前的日期和时间,如下所示:

var time_of_call;
time_of_call = new Date();

我需要将它存储在MySQL数据库中。当我尝试上传它时,该列只显示为空白但我不确定我做错了什么。我知道这不是mysql查询的问题,因为我已经尝试输入不同的值,它工作正常。

我将列设置为DATETIME,我上传了未格式化的值。有人可以用不同的方式解释我需要做什么吗?

感谢您的帮助

P.S。我无法使用NOW(),因为我正在使用它来捕获实际捕获记录的时间,而此time_of_call记录了呼叫实际进入的时间。

7 个答案:

答案 0 :(得分:10)

在JavaScript中,Date对象的基础值以毫秒为单位,而Unix服务器(以及内部的MySQL)使用整秒。

获取javascript日期对象的基础值:

var pDate = new Date();
var pDateSeconds = pDate.valueOf()/1000;

从这里开始,你会将它发送到服务器......由你来决定是否除以1000,但必须在某处完成。从这个值,你可以调用像PHP的日期('Y-m-d H:i:s',$ pDateSeconds);在它上面。

或者,您可以使用MySQL中的内置函数:

$sql = 'UPDATE table_name 
        SET field_name=FROM_UNIXTIME('.$pDateSeconds.') 
        WHERE field_name='.$row_id;

答案 1 :(得分:3)

您必须转换格式。此外,您不“上传”对象。

至少,您必须:time_of_call.getTime();返回时间戳。

上传时间戳后,您必须转换为数据库的原生格式,例如:date('d-m-Y',(int)$_REQUEST['time_of_call']);

日期格式取决于您使用的是DATE,DATETIME,TIME,TIMESTAMP还是INT。

如果你使用TIMESTAMP或INT(最好的恕我直言),你不需要任何转换。

重要提示: javascript时间戳位于毫秒,而PHP时间戳位于。 您必须time=time_of_call.getTime()/1000;才能解决此问题。

答案 2 :(得分:2)

Afaik Date不会将前导零添加到日期和月份,您应该格式化日期,如下所示:

yyyy-mm-dd hh:mm:ss

要获得预期的结果,您可以使用一个函数:

使用Javascript:

function formatDate(date1) {
  return date1.getFullYear() + '-' +
    (date1.getMonth() < 9 ? '0' : '') + (date1.getMonth()+1) + '-' +
    (date1.getDate() < 10 ? '0' : '') + date1.getDate();
}

答案 3 :(得分:0)

您需要使用正确的格式添加日期,即:YYYY-MM-DD HH:MM:SS10.3.1. The DATETIME, DATE, and TIMESTAMP Types

所以要转换你需要写这样的东西:

var t = new Date();
var YYYY = t.getFullYear();
var MM = ((t.getMonth() + 1 < 10) ? '0' : '') + (t.getMonth() + 1);
var DD = ((t.getDate() < 10) ? '0' : '') + t.getDate();
var HH = ((t.getHours() < 10) ? '0' : '') + t.getHours();
var mm = ((t.getMinutes() < 10) ? '0' : '') + t.getMinutes();
var ss = ((t.getSeconds() < 10) ? '0' : '') + t.getSeconds();


var time_of_call = YYYY+'-'+MM+'-'+DD+' '+HH+':'+mm+':'+ss;

当然,你可以缩短所有这些以及类似的东西,但你明白了。

答案 4 :(得分:0)

Try This:

Quick Java Script Date function :-)

    /***************************************************
     * Function for Fetch Date, Day, Time, Month etc..
     * input @param = month, date, time, mysql_date etc..
     **************************************************/

    function getDateNow(output) {
    var dateObj = new Date();
    var dateString = dateObj.toString();
    dateArray = dateString.split(” “);
    if (output == ‘day’) {
    output = dateArray[0];
    } else if (output == ‘month’) {
    output = dateArray[1];
    } else if (output == ‘date’) {
    output = dateArray[2];
    } else if (output == ‘year’) {
    output = dateArray[3];
    } else if (output == ‘time’) {
    output = dateArray[4];
    } else if (output == ‘am_pm’) {
    output = dateArray[5];
    } else if (output == ‘mysql_date’) {
    var dt = new Date();
    output = dt.toYMD();
    }else {
    output = dateArray[6];
    }
    return output;
    }

    /*****************************************************
     * Function for Fetch date like MySQL date fromat
     * type @Prototype
     ****************************************************/

    (function() {
    Date.prototype.toYMD = Date_toYMD;
    function Date_toYMD() {
    var year, month, day;
    year = String(this.getFullYear());
    month = String(this.getMonth() + 1);
    if (month.length == 1) {
    month = “0″ + month;
    }
    day = String(this.getDate());
    if (day.length == 1) {
    day = “0″ + day;
    }
    return year + “-” + month + “-” + day;
    }
    })();

    /***********************************
     * How to Use Function with JavaScript
     **********************************/

    var sqlDate = getDateNow(‘mysql_date’));

    /***********************************
     * How to Use Function with HTML
     **********************************/
    <a href=”javascript:void(0);” onClick=”this.innerHTML = getDateNow(‘mysql_date’);” title=”click to know Date as SQL Date”>JavaScript Date to MySQL Date</a>

答案 5 :(得分:0)

您可以使用其中任何一个来添加从JS Date对象获取SQL格式的时间戳的方法。

首先是用户当地时间:

Date.prototype.getTimestamp = function() {
    var year = this.getFullYear(),
        month = this.getMonth(),
        day = this.getDate(),
        hours = this.getHours(),
        minutes = this.getMinutes(),
        seconds = this.getSeconds();

    month = month < 10 ? "0" + month : month;
    day = day < 10 ? "0" + day : day;
    hours = hours < 10 ? "0" + hours : hours;
    minutes = minutes < 10 ? "0" + minutes : minutes;
    seconds = seconds < 10 ? "0" + seconds : seconds; 

    return year + "-" + month + "-" + day + " " + hours + ":" + minutes + ":" + seconds;
}

var d = new Date();

console.log(d.getTimestamp());

UTC中的第二名:

Date.prototype.getUTCTimestamp = function() {
    var year = this.getUTCFullYear(),
        month = this.getUTCMonth(),
        day = this.getUTCDate(),
        hours = this.getUTCHours(),
        minutes = this.getUTCMinutes(),
        seconds = this.getUTCSeconds();

    month = month < 10 ? "0" + month : month;
    day = day < 10 ? "0" + day : day;
    hours = hours < 10 ? "0" + hours : hours;
    minutes = minutes < 10 ? "0" + minutes : minutes;
    seconds = seconds < 10 ? "0" + seconds : seconds; 

    return year + "-" + month + "-" + day + " " + hours + ":" + minutes + ":" + seconds;
}

var d = new Date();

console.log(d.getUTCTimestamp());

我创建了一个轻量级脚本,使用这些以及其他常用的扩展Date对象:https://github.com/rtuosto/js-date-format

答案 6 :(得分:-1)

我在前一段时间找到了一个片段,这可能有所帮助,具体取决于您要转换的位置:

    function formatDate(date1) {
  return date1.getFullYear() + '-' +
    (date1.getMonth() < 9 ? '0' : '') + (date1.getMonth()+1) + '-' +
    (date1.getDate() < 10 ? '0' : '') + date1.getDate();
}