2016-08-02 6 views
0

私はMeteor 1.2、日付はmomentjs、配備はmeteor-upmup)です。Meteorのサーバレンダリングテンプレートで、日付が1日前に解釈されるのはなぜですか?

のMongoDBから引っ張ったときにMongoDBに永続化する前に、入力フィールドから日付値は、

moment(<date>, "DD MM YYYY").toISOString() 

を通じ実行され、テンプレートにそれをplonking前に、私はそれを駆け抜ける、

moment(<date>, moment.ISO_8601).format("DD-MM-YYYY") 

クライアントとサーバーの両方でレンダリングするテンプレートがあります(meteorhacks/meteor-ssrパッケージを使用)

ここに問題があります。

実稼働サーバー(Ubuntu 14.04)では、サーバー側テンプレートに出力された日付は、実際の日の1日前に常に表示されます。 たとえば、日付が01-08-2015の場合、サーバー上に表示されるマークアップは31-07-2015と表示されます。

この問題は、アプリケーションをローカルで実行する場合や、クライアント側のテンプレートで一般的に実行する場合、サーバー側のテンプレートには存在しません。

これをどのように把握しますか?

+3

あなたはUTCのUTCである必要がありますか? –

+0

あなたは文字列として保存したときにタイムゾーンを失ってしまった:(あなたはもはや日付クエリを実行したり、正しくソートしたり、ユーザのtzに変換したりすることはできません。 –

+0

@ MichelFloyd - "DD MM YY "はありません;-) – RobG

答えて

0

私は私の日付を保存すると、私は日付オブジェクトとして保存します。 「$日」:「2016-07-25T22:14:35.563Zそれはこのように保存されます私のモンゴデータベースで

import {Posts, Comments} from '../../lib/collections'; 
import {Meteor} from 'meteor/meteor'; 
import {check} from 'meteor/check'; 

export default function() { 

    Meteor.methods({ 
    'posts.create'(_id, title, content, userId) { 
     check(_id, String); 
     check(title, String); 
     check(content, Object); 
     check(userId, String); 

     const publishedAt = new Date(); 
     const post = {_id, title, content, userId, publishedAt}; 
     Posts.insert(post); 
    } 
    }); 

"

タイムゾーンとすべて...希望するものは

+0

私はネイティブのDate APIが[buggy](http://momentjs.com/guides/#/lib-concepts/js-date/)であり、一貫性がないことを読んだことがあります。私のアプリケーションでは、明示的な日付がユーザによって入力され、次にそれが「瞬間」と解析されます。これはネイティブDate APIの安全な使用例ですか? – adi

+0

@ aditya - 組み込みの日付はバグではありませんが、日付文字列の解析には設計上**の不一致があります。 – RobG

+0

@ tmpg-Dateコンストラクタで文字列を解析することは、非常に一貫性がなく強く推奨される組み込みDateの1つの側面です。解析するには、**常に**特注の関数やライブラリを使用し、解析フォーマットを指定します。そうでなければ、完全に偶然にしておきます。 – RobG

関連する問題