В настоящее время у меня есть переменная javascript, которая записывает текущую дату и время:
var time_of_call; time_of_call = new Date();
и мне нужно сохранить его в базе данных MySQL. Когда я пытаюсь загрузить его, столбец просто выглядит пустым, но я не уверен, что я делаю неправильно. Я знаю, что это не проблема с запросом mysql, потому что я попытался ввести разные значения, и он работает нормально.
У меня установлен столбец DATETIME
и я загружаю значение, не форматированное. Может кто-нибудь объяснить, что мне нужно сделать по-другому?
Спасибо за любую помощь
Ps Я не могу использовать NOW()
потому что я использую это для захвата времени, когда запись фактически захвачена, и этот time_of_call записывает время, когда действительно приходит вызов.
В JavaScript базовое значение объекта Date находится в миллисекундах, а серверы Unix (и MySQL внутри) используют целые секунды.
Чтобы получить базовое значение для объекта даты javascript:
var pDate = new Date(); var pDateSeconds = pDate.valueOf()/1000;
Отсюда вы отправите его на сервер … вам решать, делить его на 1000 или нет, но это нужно сделать где-то. Из этого значения вы можете просто называть что-то вроде даты PHP («Ymd H: i: s», $ pDateSeconds); в теме.
Или вы можете просто использовать встроенную функцию в MySQL:
$sql = 'UPDATE table_name SET field_name=FROM_UNIXTIME('.$pDateSeconds.') WHERE field_name='.$row_id;
Вы должны преобразовать свой формат. Кроме того, вы не загружаете объект.
По крайней мере, вам нужно сделать: time_of_call.getTime();
который возвращает метку времени.
После загрузки временной метки вам необходимо преобразовать в собственный формат DB, например: date('dm-Y',(int)$_REQUEST['time_of_call']);
Формат даты зависит от того, использовались ли вы DATE, DATETIME, TIME, TIMESTAMP или INT.
Если вы использовали TIMESTAMP или INT (лучше всего IMHO), вам не требуется преобразование.
Важно. Временная метка 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(); }
Вам нужно добавить дату с правильным форматом: YYYY-MM-DD HH:MM:SS
. 10.3.1. Типы DATETIME, DATE и TIMESTAMP
Чтобы преобразовать это, вам нужно написать что-то вроде этого:
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>
Вы можете использовать любой из них, чтобы добавить метод для получения штампов времени в формате SQL из объекта JS Date
.
Сначала в локальное время пользователя:
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());
Я нашел фрагмент некоторое время назад, что может помочь в зависимости от того, где вы хотите конвертировать:
function formatDate(date1) { return date1.getFullYear() + '-' + (date1.getMonth() < 9 ? '0' : '') + (date1.getMonth()+1) + '-' + (date1.getDate() < 10 ? '0' : '') + date1.getDate(); }