【问题标题】:How to insert moment JS time into MySQL如何将时刻 JS 时间插入 MySQL
【发布时间】:2014-11-20 18:25:58
【问题描述】:
//In Node/JS
myDate = moment(data.myTime.format('YYYY/MM/DD HH:MM:SS')).toISOString();
//myDate shows '2014-09-24T04:09:00.000Z'

Insert INTO (dateColumn..) Values(myDate)...

这是我插入后出现的错误,注意Mysql中的列是“日期时间”类型。

MySQL 错误:: { [错误:ER_TRUNCATED_WRONG_VALUE:不正确的日期时间值:第 1 行的列“_dateColumn”的“2014-09-24T04:09:00.000Z”] 代码:'ER_TRUNCATED_WRONG_VALUE',

【问题讨论】:

  • 该列是哪种数据类型?
  • 在Mysql中,该列是“日期时间”类型。

标签: javascript php mysql node.js momentjs


【解决方案1】:

出现此结果是因为您使用的是 toISOString() 方法,并且插入到您的 DATETIME 列中的格式无效。正如docs 指出的那样,正确的格式可能YYYY-MM-DD HH:MM:SS(我认为这取决于MySQL 配置,但这是默认设置)。

所以你应该尝试像这样使用moment的format()方法:

myDate =  moment(data.myTime.format('YYYY/MM/DD HH:mm:ss')).format("YYYY-MM-DD HH:mm:ss");

其实我不知道data.myTime是什么,但是如果也是一个moment对象,你可以把第一个format()方法改掉,去掉第二个。

【讨论】:

  • 你给我的那行是给我一个对象:{ _isAMomentObject: true, _i: '9-24-2014', _f: undefined, _l: undefined, _strict: undefined, _isUTC: false, _pf:{空:假,未使用令牌:[],未使用输入:[],溢出:-2,charsLeftOver:0,nullInput:假,invalidMonth:null,invalidFormat:假,userInvalidated:假,iso:假},_d:星期三2014 年 9 月 24 日 00:00:00 GMT-0400 (EDT),_isValid: true }
  • @user1529412 好吧,它应该返回一个字符串。
  • 请注意,我的原始 data.myTime 本身就是一个对象,如下所示:{ _isAMomentObject: true, _i: '9-24-2014', _f: undefined, _l: undefined, _strict: undefined, _isUTC :false,_pf:{空:false,未使用令牌:[],未使用输入:[],溢出:-2,charsLeftOver:0,nullInput:false,invalidMonth:null,invalidFormat:false,userInvalidated:false,iso:false}, _d:2014 年 9 月 24 日星期三 00:00:00 GMT-0400 (EDT) }
  • YYYY-MM-DD HH:MM:SS 应该是YYYY-MM-DD HH:mm:ss
  • moment 将用月份值替换 MM。试试这个moment(timeString, 'YYYY/MM/DD HH:mm:ss').format('YYYY-MM-DD HH:mm:ss');
【解决方案2】:

DontVoteMeDown answer是对的,只是分钟'mm'和秒'ss'需要小写,否则返回错误值:

myDate =  moment(new Date()).format("YYYY-MM-DD HH:mm:ss");

此外,您应该在 PHP 中执行 SQL 查询之前检查 javascript 发送的值:

DateTime::createFromFormat('Y-m-d H:i:s', $myDate);

如果日期格式错误,将返回false

【讨论】:

    【解决方案3】:

    我认为这是正确的格式。否则,您会在分钟中插入月份,并且您的秒数也会超过 60。

    myDate =  moment(data.myTime.format('YYYY/MM/DD HH:MM:ss')).format("YYYY-MM-DD HH:MM:SS");
    

    使用 Moment.js 2.9.0 在 Chrome 中测试

    【讨论】:

    • YYYY-MM-DD HH:mm:ss
    【解决方案4】:

    要生成mysql格式的日期时间,你可以使用这个:

    var moment = require('moment');
    let currentTimestamp = moment().unix();//in seconds
    let currentDatetime = moment(currentTimestamp*1000).format("YYYY-MM-DD HH:mm:ss");//mysql datetime.
    currentTimestamp = moment(currentDatetime).valueOf();//current timestamp in milliseconds
    

    【讨论】:

      【解决方案5】:
      moment().format("YYYY-MM-DD HH:mm:ss")
      

      【讨论】:

        【解决方案6】:

        (我正在使用 Node.js、Express 和 MySql,这对我很有用:)

        var momentDate=new moment('2018-08-31T20:13:00.000Z');
        var readyToInsert=momentDate.format("YYYY-MM-DD HH:mm:ss");

        【讨论】:

          【解决方案7】:

          这是一个将其格式化为 MySQL DateTime 格式的函数扩展

          moment.prototype.toMySqlDateTime = function () {
              return this.format('YYYY-MM-DD HH:mm:ss');
          };
          

          你可以这样做:moment().toMySqlDateTime();

          【讨论】:

          • 我觉得这个用起来真的很方便。
          猜你喜欢
          • 1970-01-01
          • 2018-11-17
          • 2012-09-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-07-27
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多