Преобразуйте JavaScript в объект даты в формат даты MySQL (ГГГГ-ММ-ДД)
Я пытаюсь использовать JavaScript для преобразования объекта даты в действительную дату MySQL - каков наилучший способ сделать это?
12 ответов
Вероятно, лучше всего использовать такую библиотеку, как Date.js (хотя она не поддерживалась годами) или Moment.js.
Но чтобы сделать это вручную, вы можете использовать Date#getFullYear()
, Date#getMonth()
(начинается с 0 = января, так что вы, вероятно, хотите + 1), и Date#getDate()
(день месяца). Просто добавьте месяц и день к двум символам, например:
(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;
}
})();
Использование:
var dt = new Date();
var str = dt.toYMD();
Обратите внимание, что у функции есть имя, которое полезно для целей отладки, но из-за анонимной функции области видимости нет загрязнения глобального пространства имен.
Это использует местное время; для UTC, просто используйте версии UTC (getUTCFullYear
, так далее.).
Предостережение: я просто выбросил это, это полностью не проверено.
Чтобы получить дату
new Date().toJSON().slice(0, 10)
//2015-07-23
для свидания
new Date().toJSON().slice(0, 19).replace('T', ' ')
//2015-07-23 11:26:00
Обратите внимание, что итоговая дата / дата и время всегда будут в часовом поясе UTC
Самая короткая версия /questions/6624973/preobrazujte-javascript-v-obekt-datyi-v-format-datyi-mysql-gggg-mm-dd/6624990#6624990:
/**
* MySQL date
* @param {Date} [date] Optional date object
* @returns {string}
*/
function mysqlDate(date){
date = date || new Date();
return date.toISOString().split('T')[0];
}
С помощью:
var date = mysqlDate(); //'2014-12-05'
Это сработало для меня, просто измените строку:
var myDate = new Date();
var myDate_string = myDate.toISOString();
var myDate_string = myDate_string.replace("T"," ");
var myDate_string = myDate_string.substring(0, myDate_string.length - 5);
function js2Sql(cDate) {
return cDate.getFullYear()
+ '-'
+ ("0" + (cDate.getMonth()+1)).slice(-2)
+ '-'
+ ("0" + cDate.getDate()).slice(-2);
}
Из JS date в Mysql конвертировать формат даты вы можете просто сделать это:
date.toISOString().split("T")[0]
Немного опечатка в первом примере, когда день имеет длину меньше 1, он добавляет месяц вместо дня к результату.
Прекрасно работает, хотя, если вы измените:
if (day.length == 1) {
day = "0" + month;
}
в
if (day.length == 1) {
day = "0" + day;
}
Спасибо за публикацию этого сценария.
Исправленная функция выглядит так:
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;
}
Просто это:
Object.defineProperties( Date.prototype ,{
date:{
get:function(){return this.toISOString().split('T')[0];}
},
time:{
get:function(){return this.toTimeString().match(/\d{2}:\d{2}:\d{2}/)[0];}
},
datetime:{
get : function(){return this.date+" "+this.time}
}
});
теперь вы можете использовать
sql_query = "...." + (new Date).datetime + "....";
Мне нужно это для имени файла и со временем в текущем часовом поясе.
const timezoneOffset = (new Date()).getTimezoneOffset() * 60000;
const date = (new Date(Date.now() - timezoneOffset))
.toISOString()
.substring(0, 19)
.replace('T', '') // replace T with a space
.replace(/ /g, "_") // replace spaces with an underscore
.replace(/\:/g, "."); // replace colons with a dot
Источник
Я хотел бы сказать, что это, вероятно, лучший способ сделать это. Только что подтвердил, что работает:
new Date().toISOString().replace('T', ' ').split('Z')[0];
// function
getDate = function(dateObj){
var day = dateObj.getDay() < 9 ? '0'+dateObj.getDay():dateObj.getDay();
var month = dateObj.getMonth() < 9 ? '0'+dateObj.getMonth():dateObj.getMonth();
return dateObj.getFullYear()+'-'+month+'-'+day;
}
// example usage
console.log(getDate(new Date()));
// with custom date
console.log(getDate(new Date(2012,dateObj.getMonth()-30,dateObj.getDay()));
Посмотрите на эту удобную библиотеку для всех ваших потребностей форматирования даты: http://blog.stevenlevithan.com/archives/date-time-format
Попробуй это
dateTimeToMYSQL(datx) {
var d = new Date(datx),
month = '' + (d.getMonth() + 1),
day = d.getDate().toString(),
year = d.getFullYear(),
hours = d.getHours().toString(),
minutes = d.getMinutes().toString(),
secs = d.getSeconds().toString();
if (month.length < 2) month = '0' + month;
if (day.length < 2) day = '0' + day;
if (hours.length < 2) hours = '0' + hours;
if (minutes.length < 2) minutes = '0' + minutes;
if (secs.length < 2) secs = '0' + secs;
return [year, month, day].join('-') + ' ' + [hours, minutes, secs].join(':');
}
Обратите внимание, что вы можете удалить часы, минуты и секунды, и вы получите результат в виде ГГГГ-ММ-ДД. Преимущество заключается в том, что дата и время, введенные в форму HTML, остаются прежними: без преобразования в UTC
Результат будет (для вашего примера):
dateToMYSQL(datx) {
var d = new Date(datx),
month = '' + (d.getMonth() + 1),
day = d.getDate().toString(),
year = d.getFullYear();
if (month.length < 2) month = '0' + month;
if (day.length < 2) day = '0' + day;
return [year, month, day].join('-');
}
Может быть!
function Date_toYMD(d)
{
var year, month, day;
year = String(d.getFullYear());
month = String(d.getMonth() + 1);
if (month.length == 1) {
month = "0" + month;
}
day = String(d.getDate());
if (day.length == 1) {
day = "0" + day;
}
return year + "-" + month + "-" + day;
}