2016-07-26 10 views
0

Node.JSとExpressJSを使用してrestサーバーを作成しました。データベースはMySQLです。 私はフロントエンドから次のように日付を渡しています。NodeJSで日付が正しく保存されない(実際の日付より1日遅い)

2016年7月26日

そして、私はデータベースに行くとき、それはこのように保存されます。次のよう:

2016年7月26日0時00分00秒

MySQLの日付形式はタイムスタンプですので。そして、REST rulsから結果を取得すると、このような日付が得られます。

"2016-07-25T18:30:00.000Z"

私は26セーブ

しかし、ここで私はこの理由は何25を取得しますか?時間帯 ?この問題を解決する方法を教えてください。

+1

タイムゾーンの問題のようです。 –

+0

これはタイムゾーンの問題です。これと絶えず戦いたくない場合は、データベースをUTCに設定してください。タイムゾーンはアプリケーションコードでのみ使用し、さらにユーザーの好みに基づいて使用します。 – tadman

+0

データベースのタイムゾーンをUTCに変更することを意味しますか?それをしました。役に立たなかった –

答えて

0

ノードがISOStringに日付を変換し、日付がGMTであるためです。 .toLocaleString(); dbからデータをクエリした後。

例:

connection.query(yourDbQuery、関数(ERR、結果){IF(結果){
VAR日= result.date.toLocaleString();}})。

また、日付に非常に役立つnpmの瞬間をインストールすることもできます。

NPMモーメント

をインストールし、次のコードを使用する使用、インストールする

VARモーメント=( '瞬間')を必要とします。 date = moment(result.date).format( 'DD/MM/YYYY');

+0

result.date =瞬間(新しい日付())。書式( 'DD/MM/YYYY'); - >このコードは何ですか? –

+0

私は上記を編集しました。 結果はdbクエリの結果です。 result.date dbからのあなたの日付であると仮定すると、 でもresult.date.toLocaleString()の代わりにこの行を使用できます。 –

+0

[email protected] - >私に電子メールを送る –

0

私の場合、.toLocalString()は同じiSOString形式を返します。ですから、iSOStringの時間を任意の形式(この場合はUTC形式)に変換するために、独自の関数を使用しています。

例:2018-02-09T12:18:23.000Z =>ここでは2018年2月9日12時18分23秒

は、どのように私はUTC日付書式取得していますされています

var date = date_formate(new Date(result[0].date), "yyyy-MM-dd HH:mm:ss"); 

コードに以下のカスタム関数を含めます。

function date_formate (date, format, utc) { 
    var MMMM = ["\x00", "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]; 
    var MMM = ["\x01", "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]; 
    var dddd = ["\x02", "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"]; 
    var ddd = ["\x03", "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"]; 

    var y = utc ? date.getUTCFullYear() : date.getFullYear(); 
    format = format.replace(/(^|[^\\])yyyy+/g, "$1" + y); 
    format = format.replace(/(^|[^\\])yy/g, "$1" + y.toString().substr(2, 2)); 
    format = format.replace(/(^|[^\\])y/g, "$1" + y); 

    var M = (utc ? date.getUTCMonth() : date.getMonth()) + 1; 
    format = format.replace(/(^|[^\\])MMMM+/g, "$1" + MMMM[0]); 
    format = format.replace(/(^|[^\\])MMM/g, "$1" + MMM[0]); 
    format = format.replace(/(^|[^\\])MM/g, "$1" + this.pad(M, 2)); 
    format = format.replace(/(^|[^\\])M/g, "$1" + M); 

    var d = utc ? date.getUTCDate() : date.getDate(); 
    format = format.replace(/(^|[^\\])dddd+/g, "$1" + dddd[0]); 
    format = format.replace(/(^|[^\\])ddd/g, "$1" + ddd[0]); 
    format = format.replace(/(^|[^\\])dd/g, "$1" + this.pad(d, 2)); 
    format = format.replace(/(^|[^\\])d/g, "$1" + d); 

    var H = utc ? date.getUTCHours() : date.getHours(); 
    format = format.replace(/(^|[^\\])HH+/g, "$1" + this.pad(H, 2)); 
    format = format.replace(/(^|[^\\])H/g, "$1" + H); 

    var h = H > 12 ? H - 12 : H == 0 ? 12 : H; 
    format = format.replace(/(^|[^\\])hh+/g, "$1" + this.pad(h, 2)); 
    format = format.replace(/(^|[^\\])h/g, "$1" + h); 

    var m = utc ? date.getUTCMinutes() : date.getMinutes(); 
    format = format.replace(/(^|[^\\])mm+/g, "$1" + this.pad(m, 2)); 
    format = format.replace(/(^|[^\\])m/g, "$1" + m); 

    var s = utc ? date.getUTCSeconds() : date.getSeconds(); 
    format = format.replace(/(^|[^\\])ss+/g, "$1" + this.pad(s, 2)); 
    format = format.replace(/(^|[^\\])s/g, "$1" + s); 

    var f = utc ? date.getUTCMilliseconds() : date.getMilliseconds(); 
    format = format.replace(/(^|[^\\])fff+/g, "$1" + this.pad(f, 3)); 
    f = Math.round(f/10); 
    format = format.replace(/(^|[^\\])ff/g, "$1" + this.pad(f, 2)); 
    f = Math.round(f/10); 
    format = format.replace(/(^|[^\\])f/g, "$1" + f); 

    var T = H < 12 ? "AM" : "PM"; 
    format = format.replace(/(^|[^\\])TT+/g, "$1" + T); 
    format = format.replace(/(^|[^\\])T/g, "$1" + T.charAt(0)); 

    var t = T.toLowerCase(); 
    format = format.replace(/(^|[^\\])tt+/g, "$1" + t); 
    format = format.replace(/(^|[^\\])t/g, "$1" + t.charAt(0)); 

    var tz = -date.getTimezoneOffset(); 
    var K = utc || !tz ? "Z" : tz > 0 ? "+" : "-"; 
    if (!utc) { 
     tz = Math.abs(tz); 
     var tzHrs = Math.floor(tz/60); 
     var tzMin = tz % 60; 
     K += this.pad(tzHrs, 2) + ":" + this.pad(tzMin, 2); 
    } 
    format = format.replace(/(^|[^\\])K/g, "$1" + K); 

    var day = (utc ? date.getUTCDay() : date.getDay()) + 1; 
    format = format.replace(new RegExp(dddd[0], "g"), dddd[day]); 
    format = format.replace(new RegExp(ddd[0], "g"), ddd[day]); 

    format = format.replace(new RegExp(MMMM[0], "g"), MMMM[M]); 
    format = format.replace(new RegExp(MMM[0], "g"), MMM[M]); 

    format = format.replace(/\\(.)/g, "$1"); 

    return format; 
} 
関連する問題