日時文字列 (2015-05-12 13:30:00+00") と時刻文字列 ("7:00 AM") の値を持つ 2 つのプロパティを持つオブジェクトを Sails API に渡しています。 .
私の Sails コントローラーでは、日時文字列から元の時刻を削除し、時刻文字列を 24 時間形式に変換し、UTC 日付オブジェクトを作成して PostgreSQL データベースに挿入します。コントローラーのコードは次のとおりです。
module.exports = {
toDateObj: function(req, res) {
if (!req.param('jobSchedObj')) {
res.badRequest('Missing required parameter!');
} else {
var date = req.param('jobSchedObj').scheduled_date;
var startTime = req.param('jobSchedObj').scheduled_start_time;
var endTime = req.param('jobSchedObj').scheduled_end_time;
var times = {scheduled_start_time: startTime, scheduled_end_time: endTime};
var toInsert = [];
var toInsertObj = {};
for (var time in times) {
//Strip time from date
var dateRegex = /(\d{4})-(\d{2})-(\d{2})/g;
var thisDate = dateRegex.exec(date);
//format new time to 24-hour format
var hours = Number(times[time].match(/^(\d+)/)[1]);
var minutes = Number(times[time].match(/:(\d+)/)[1]);
var AP = times[time].match(/\s(.*)$/);
if (!AP) {
AP = times[time].slice(-2);
} else {
AP = AP[1]
}
if (AP == "PM" && hours < 12) {
hours = hours + 12
}
if (AP == "AM" && hours == 12) {
hours = hours - 12
}
var Hours24 = hours.toString();
var Minutes24 = minutes.toString();
if (hours < 10) {
Hours24 = "0" + Hours24
}
if (minutes < 10) {
Minutes24 = "0" + Minutes24
}
//Concat new 24-hour time with date and create Date Obj
toInsertObj[time] = new Date(Date.UTC(parseInt(thisDate[1]),
parseInt(thisDate[2]) - 1,
parseInt(thisDate[3]),
parseInt(Hours24),
parseInt(Minutes24)));
}
toInsertObj.allotted_time = req.param('jobSchedObj').allotted_time;
toInsertObj.repair_shop_equipment_id = req.param('jobSchedObj').repair_shop_equipment_id;
toInsertObj.technician_id = req.param('jobSchedObj').technician_id;
toInsertObj.repair_history_id = req.param('jobSchedObj').repair_history_id;
toInsertObj.repair_shop_id = req.param('jobSchedObj').repair_shop_id;
toInsert.push(toInsertObj);
Schedules.create(toInsert, function (err, schedules){
if (err) {
res.send(err);
} else {
res.send(schedules);
}
});
}
}
};
そして、これは、コントローラー ロジックが何を行っているかを確認するためにテストするCodePenです。
上部に元の例のようなものを入力すると、UTC"2015-05-12 13:30:00+00", "7:00 AM"
が返されます。Tue May 12 2015 03:30:00 GMT-0400 (EDT)
しかし、pgAdminでテーブルを開くと、値として保存され2015-05-12 7:30:00+00
、値を取得するためにgetリクエストを行うと、値が文字列として返されます"2015-05-12T7:30:00.000Z"
次に、その文字列を日付オブジェクトに戻すために何をしようとしても、日付値は最終的に2015-05-12 3:30 AM
. Moment.jsのさまざまなメソッドと同様Date.parse(<string>)
に、私は試しました。解析する前に戻り文字列の末尾をnew Date(<string>)
切り取っても違いはありませんでした。000Z
私が返したいのは、投稿された時間の UTC/ローカルを表すエポック時間に変換できるものです。