将javascript转换为date对象为mysql日期格式(YYYY-MM-DD)

时间:2010-02-17 11:16:19

标签: javascript mysql date

我正在尝试使用javascript将日期对象转换为有效的mysql日期 - 执行此操作的最佳方法是什么?

14 个答案:

答案 0 :(得分:108)

获取日期

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

请注意,生成的日期/日期时间将始终为UTC时区

答案 1 :(得分:31)

可能最好使用Date.js之类的图书馆(尽管多年来一直没有维护)或Moment.js

但是要手动执行此操作,您可以使用Date#getFullYear()Date#getMonth()(从0 = 1月开始,因此您可能需要+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等)。

警告:我刚把它扔掉了,它完全没有经过测试。

答案 2 :(得分:7)

function js2Sql(cDate) {
    return cDate.getFullYear()
           + '-'
           + ("0" + (cDate.getMonth()+1)).slice(-2)
           + '-'
           + ("0" + cDate.getDate()).slice(-2);
}

答案 3 :(得分:7)

这对我有用,只需编辑字符串:

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

答案 4 :(得分:3)

在第一个示例中有点拼写错误,当一天的长度小于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;
}

答案 5 :(得分:3)

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'

答案 6 :(得分:3)

就是这样:

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 + "....";

答案 7 :(得分:2)

我需要这个文件名和当前时区的时间。

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

来源

答案 8 :(得分:1)

从JS日期到Mysql日期格式转换,您可以简单地执行此操作:

date.toISOString().split("T")[0]

答案 9 :(得分:0)

请查看这个方便的库,了解所有日期格式需求:http://blog.stevenlevithan.com/archives/date-time-format

答案 10 :(得分:0)

可以!

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

答案 11 :(得分: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()));

答案 12 :(得分:0)

尝试一下

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

请注意,您可以删除小时,分钟和秒,结果将为YYYY-MM-DD 优点是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('-');
  }

答案 13 :(得分:0)

我想说的是,这可能是最好的解决方法。刚刚确认它有效:

new Date().toISOString().replace('T', ' ').split('Z')[0];