web-dev-qa-db-ja.com

瞬間JS時間をMySQLに挿入する方法

//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の列は「datetime」型です。

MySQLエラー:{[エラー:ER_TRUNCATED_WRONG_VALUE:行1の列 '_dateColumn'の '2014-09- 24T04:09:00.000Z'の誤った日時値:コード: 'ER_TRUNCATED_WRONG_VALUE'、

30
user1529412

この結果は、 toISOString() メソッドを使用しており、DATETIME列に挿入する有効な形式ではないために発生します。正しい形式おそらくは_YYYY-MM-DD HH:MM:SS_(MySQL構成に依存すると思いますが、これがデフォルトです) docs 指摘。

したがって、次のようなモーメントの format() メソッドを使用してみてください。

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

実際、_data.myTime_が何であるかはわかりませんが、その瞬間オブジェクトでもある場合は、最初のformat()メソッドを変更して2番目のメソッドを削除できます。

55
DontVoteMeDown

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を返します。

25
Sheraf

(Node.js、Express、およびMySqlを使用していますが、これはうまくいきました。)

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

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
4
Salar
moment().format("YYYY-MM-DD HH:mm:ss")
3
Ashutosh Jha

以下は、MySQL DateTime形式にフォーマットするための関数拡張です。

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

次のことができるようになります:moment().toMySqlDateTime();

1
Yani

これは正しいフォーマットだと思います。それ以外の場合、分に挿入された月を取得し、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でテスト済み

0
Carlos