我目前有一个javascript变量,它记录当前的日期和时间,如下所示:
var time_of_call;
time_of_call = new Date();
我需要将它存储在MySQL数据库中。当我尝试上传它时,该列只显示为空白但我不确定我做错了什么。我知道这不是mysql查询的问题,因为我已经尝试输入不同的值,它工作正常。
我将列设置为DATETIME
,我上传了未格式化的值。有人可以用不同的方式解释我需要做什么吗?
感谢您的帮助
P.S。我无法使用NOW()
,因为我正在使用它来捕获实际捕获记录的时间,而此time_of_call记录了呼叫实际进入的时间。
答案 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:SS
。 10.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();
}