在 mySQL 中存储 javascript Date()


Storing javascript Date() in mySQL

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

var time_of_call;
time_of_call = new Date();

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

我已将列设置为 DATETIME,并且正在上传未格式化的值。有人可以解释一下我需要做什么不同吗?

感谢您的任何帮助

附言我不能使用NOW(),因为我用它来捕获实际捕获记录的时间,而此time_of_call记录呼叫实际传入的时间。

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

要获取 javascript 日期对象的基础值,请执行以下操作:

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

从这里,您将它发送到服务器...是否将其除以 1000 取决于您,但必须在某个地方完成。 从这个值中,你可以调用类似 PHP 的 date('Y-m-d H:i:s', $pDateSeconds);在上面。

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

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

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

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

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

日期

格式取决于您使用的是日期、日期时间、时间、时间戳还是 INT。

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

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

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();
}

您可以使用其中任何一个来添加从 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());

世界协调时第二位:

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

您需要

添加具有正确格式的日期,即:YYYY-MM-DD HH:MM:SS .10.3.1. 日期时间、日期和时间戳类型

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

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;

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

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>

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

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