Преобразуйте JavaScript в объект даты в формат даты MySQL (ГГГГ-ММ-ДД) - PullRequest
34 голосов
/ 17 февраля 2010

Я пытаюсь использовать javascript для преобразования объекта даты в действительную дату mysql - каков наилучший способ сделать это?

Ответы [ 13 ]

112 голосов
/ 22 февраля 2013

Чтобы получить дату

new Date().toJSON().slice(0, 10)
//2015-07-23

для даты и времени

new Date().toJSON().slice(0, 19).replace('T', ' ')
//2015-07-23 11:26:00

Обратите внимание, что итоговая дата / дата / время всегда будут в часовом поясе UTC

32 голосов
/ 17 февраля 2010

Вероятно, лучше использовать библиотеку, такую ​​как 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 и т. д.).

Предостережение: я просто выбросил это, оно полностью не проверено.

7 голосов
/ 12 июля 2012

Это сработало для меня, просто измените строку вместо:

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);
7 голосов
/ 29 марта 2012
function js2Sql(cDate) {
    return cDate.getFullYear()
           + '-'
           + ("0" + (cDate.getMonth()+1)).slice(-2)
           + '-'
           + ("0" + cDate.getDate()).slice(-2);
}
3 голосов
/ 25 июля 2015

только это:

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 + "....";
3 голосов
/ 05 декабря 2014

Самая короткая версия https://stackoverflow.com/a/11453710/3777994:

/**
 * 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'
3 голосов
/ 23 июня 2010

Немного опечатка в первом примере, когда день имеет длину меньше 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;
}
2 голосов
/ 06 октября 2017

От преобразования даты в JS в формат даты Mysql вы можете просто сделать это:

date.toISOString().split("T")[0]
2 голосов
/ 12 мая 2016

Мне нужно это для имени файла и времени текущего часового пояса.

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

Источник

0 голосов
/ 05 июля 2019

Попробуйте это

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('-');
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...