我目前有一个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();
}