私はデータベースとしてMongoDBを使用するReactアプリケーションを作成しています。特に特定の文書の日付を更新するときに、データベースから日付を保存したり取得したりするときに、奇妙な動作があるようです。MongoDBで異常な日付の動作
新しい文書を作成すると、すべて問題ありません。しかし、AJAX呼び出しを使用してその文書の日付を編集しようとすると、MongoDBに保存されている日付は、選択した日付より1日早く、ブラウザに表示される日付になります。もう少し説明するために、以下のコードを書いてください。
日付は、HTML5 <input type='date' />
要素を使用して選択されます。ここにいくつかのコードがあります。コンソールログをさまざまな時点で表示して出力を表示しました。 2016年10月30日を日付として選択しているとします。
saveChanges(e, cancel){
e.preventDefault();
const cancelled = cancel ? true : false
console.log(this.state.date); // 30 Oct
console.log(this.state.year); // 2016
const saveData = {
id: this.props.data.id,
venue: this.state.venue,
unitNumber: this.state.unitNumber,
unitName: this.state.unitName,
date: this.state.date,
year: this.state.year,
day: this.state.day,
tutorID: this.state.tutorID,
cancelled: cancelled
}
editWorkshop(saveData, (data) => {
this.props.getWorkshopDetails();
this.props.workshopDetailsSaved(data);
});
}
:日付と年が他の場所で表示目的のために別れたが、その後、サーバーに送信する前にJSのDateオブジェクトの形で一緒に参加します
が反応コンポーネントメソッドを(以下のコードを参照してください)上記の方法はeditWorkshop.js
のデータ、外部のAJAX呼び出し、使用axios送信:AJAX呼び出しを処理
import axios from 'axios';
export default function editWorkshop(input, callback){
const date = new Date(input.date + ' ' + input.year) // Rejoin date and year and convert to Date object
console.log(date); // Sun Oct 30 2016 00:00:00 GMT+0100 (BST)
const data = {
id: input.id,
venue: input.venue,
unitNumber: input.unitNumber,
unitName: input.unitName,
date: date,
day: input.day,
tutorID: input.tutorID,
cancelled: input.cancelled
}
axios.post('/editWorkshop', data).then(function(res){
callback(res.data);
})
}
そして最後に明示的ルートを
本当に奇妙何210const express = require('express');
const Workshop = require('../data/models/Workshop');
module.exports = function(req, res){
const data = req.body
console.log(data.date); // 2016-10-29T23:00:00.000Z - here is where it seems to go wrong - notice that the date has changed to 2016-10-29 instead of 10-30. This now gets written to the database
Workshop.update({ _id: data.id }, {
$set: {
unitNumber: data.unitNumber,
date: data.date,
venue: data.venue,
tutor: data.tutorID,
session: data.day,
cancelled: data.cancelled
}
}, function(err){
if (err) {
res.send(err);
return
}
var message = 'Workshop updated'
res.send({
success: true,
message: message
});
})
}
は、私は別の場所のアプリケーションでデータベースからデータを取得するとき、それはブラウザで正しい日付を示すことである - 10月30日2016年
間違いなくこれは正しいような問題ではありません日付が表示されていますが、これらの日付はアプリの基本的な部分であり、今後のバグの範囲がある可能性があることを心配しています。
誰もがこれにどのような光を当てることができますか?
これは素晴らしいことです。日付が正しく保存されていれば、私はこの不一致を乗り越えることができます。将来的に潜在的なバグがないことを確認したかっただけです。 – Chris