Convert javascript to date object to mysql date format (YYYY-MM-DD)

前端 未结 14 882
清歌不尽
清歌不尽 2020-12-13 18:04

I\'m trying to use javascript to convert a date object into a valid mysql date - what is the best way to do this?

相关标签:
14条回答
  • 2020-12-13 18:13

    To get date

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

    for datetime

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

    Note, that resulting date / datetime will always be in UTC timezone

    0 讨论(0)
  • 2020-12-13 18:18

    Probably best to use a library like Date.js (although that hasn't been maintained in years) or Moment.js.

    But to do it manually, you can use Date#getFullYear(), Date#getMonth() (it starts with 0 = January, so you probably want + 1), and Date#getDate() (day of month). Just pad out the month and day to two characters, e.g.:

    (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;
        }
    })();
    

    Usage:

    var dt = new Date();
    var str = dt.toYMD();
    

    Note that the function has a name, which is useful for debugging purposes, but because of the anonymous scoping function there's no pollution of the global namespace.

    That uses local time; for UTC, just use the UTC versions (getUTCFullYear, etc.).

    Caveat: I just threw that out, it's completely untested.

    0 讨论(0)
  • 2020-12-13 18:18

    From JS date to Mysql date format conversion you can simply do this:

    date.toISOString().split("T")[0]
    
    0 讨论(0)
  • 2020-12-13 18:22

    I needed this for a filename and with the time in the current timezone.

    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
    

    Source

    • convert-javascript-to-date-object-to-mysql-date-format-yyyy-mm-dd
    • javascript-toisostring-ignores-timezone-offset
    0 讨论(0)
  • 2020-12-13 18:23

    A bit of a typo in the first example, when a day has a length less than 1 it is adding the month instead of the day to the result.

    Works great though if you change:

        if (day.length == 1) {
            day = "0" + month;
        }
    

    to

        if (day.length == 1) {
            day = "0" + day;
        }
    

    Thanks for posting that script.

    The corrected function looks like:

    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;
    }
    
    0 讨论(0)
  • 2020-12-13 18:23

    Try this

    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(':');
      }
    

    Note that you can remove the hours, minutes and seconds and you will have the result as YYYY-MM-DD The advantage is that the datetime entered in the HTML form remains the same: no transformation into UTC

    The result will be (for your example) :

    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('-');
      }
    
    0 讨论(0)
提交回复
热议问题