错误日志:
{[错误:日期时间值不正确:'2012-08-24T17:29:11.683Z'for 列''机器人_refreshed_at'在第1行]编号:1292,sqlStateMarker: '#',sqlState:'22007',消息:'日期时间值不正确: \'2012-08-24T17:29:11.683Z \'for column \'robot_refreshed_at \'at row 1',sql:'INSERT INTO用户 (ID,姓名,count_moments,count_likes,count_followers,抢 ot_refreshed_at,robot_count_followers)VALUES (\ '1834084 \' \ 'NNNyingzi \',\ '5 \' \ '0 \',\'0 \',\'2012-08-24T17:29:11.683Z \',\'0 \')',setMaxListeners: [功能],发出:[功能],addListener:[功能],开:[功能], 一次:[Function],removeListener:[Function],removeAllListeners: [功能],听众:[功能]}
我在Node.js
if s instanceof Date
return s.toISOString()
并在数据库中更新它们。
SQL
插入表达式如下:
INSERT INTO users (id,name,count_moments,count_likes,count_followers,rob ot_refreshed_at,robot_count_followers) VALUES (\'1834084\',\'NNNyingzi\',\'5\',\ '0\',\'0\',\'2012-08-24T17:29:11.683Z\',\'0\')
我做错了吗?我刚从服务器中的表中使用PHPMyAdmin
复制了一个表。
非常感谢。
答案 0 :(得分:11)
MySQL会识别以下格式的
DATETIME
和TIMESTAMP
值:
作为
'YYYY-MM-DD HH:MM:SS'
或'YY-MM-DD HH:MM:SS'
格式的字符串。这里也允许使用“宽松”语法:任何标点符号都可以用作日期部分或时间部分之间的分隔符。例如,'2012-12-31 11:30:45'
,'2012^12^31 11+30+45'
,'2012/12/31 11*30*45'
和'2012@12@31 11^30^45'
是等效的。作为没有
'YYYYMMDDHHMMSS'
或'YYMMDDHHMMSS'
格式的分隔符的字符串,前提是该字符串作为日期有意义。例如,'20070523091528'
和'070523091528'
被解释为'2007-05-23 09:15:28'
,但'071122129015'
是非法的(它具有无意义的分钟部分)并变为'0000-00-00 00:00:00'
。作为
YYYYMMDDHHMMSS
或YYMMDDHHMMSS
格式的数字,前提是该数字作为日期有意义。例如,19830905132800
和830905132800
被解释为'1983-09-05 13:28:00'
。
DATETIME
或TIMESTAMP
值可包括最小微秒(6位)精度的尾随小数秒部分。虽然可以识别此小数部分,但会将其从存储在DATETIME
或TIMESTAMP
列中的值中丢弃。有关MySQL中小数秒支持的信息,请参阅Section 11.3.6, “Fractional Seconds in Time Values”。
'2012-08-24T17:29:11.683Z'
的日期字面值不符合任何格式;建议你 -
使用Node.js Date对象的toLocaleFormat()
方法(确保MySQL连接的时区与Node.js的语言环境的时区匹配):
if s instanceof Date
return s.toLocaleFormat("%Y-%m-%d %H:%M:%S")
使用Node.js Date对象的valueOf()
方法获取自UNIX纪元以来毫秒的时间值,除以1000
(得到 UNIX 自UNIX纪元以来)并通过MySQL的FROM_UNIXTIME()
函数。
答案 1 :(得分:2)
我在这个链接上找到了它:
MySQL insert to DATETIME: is it safe to use ISO::8601 format?
似乎插入ISO8601时间戳并不安全。它取决于MySQL
的解析器。也许不同的版本使用不同的方法。
Date.prototype.format = (format) ->
o = {
"(M+)" : this.getMonth()+1,
"(d+)" : this.getDate(),
"(h+)" : this.getHours(),
"(m+)" : this.getMinutes(),
"(s+)" : this.getSeconds(),
"(q+)" : Math.floor((this.getMonth()+3)/3),
"(S)" : this.getMilliseconds()
}
if /(y+)/.test(format)
format = format.replace(RegExp.$1, (this.getFullYear()+"").substr(4 - RegExp.$1.length))
for k, v of o
if (new RegExp(k)).test(format)
format = format.replace(RegExp.$1, if RegExp.$1.length == 1 then o[k] else ('00'+ o[k]).substr((''+ o[k]).length))
return format
此代码可以为node.js
提供格式化Date