2012-02-18 13 views
1

私は数日間日にちを読んでいて、一見ここでサークルに入っています。私は右、十分javascriptの日付オブジェクトの変更

new Date(2012,03,13,01,31,38); 

簡単...私はそれからJS日付オブジェクトを作成したいこの

2012,03,13,01,31,38 

のように見えるDB内の文字列を持っていますか?しかし、それはそう月は1でオフになって、時間が4時間(多分、DSTやタイムゾーン関連???)でオフになって

2012-04-13 05:31:38 +0000 

として戻ってきます。私は単に私が提供したものと一致する日付がほしいと思う。 JSの日付オブジェクトを扱うナットです。

日付オブジェクトが文字列の正確な日付と時刻であること、タイムゾーンやDSTの変更が必要ないこと、文字列と一致する日付だけであることを確認する方法を教えてください。

アプリケーションに関する詳細: 私のアプリケーションは、私が開発している(JSを使用してビルドしている)チタン製のiphoneアプリケーション用です。基本的には、私のアプリケーションの一部にはデータのロギングが含まれ、そのログではデバイスの現在の日付と時刻が収集されます。私はこの情報をすべてmySQLデータベースに保存します。データベースのフィールドは次のような形式になります。 "2012-02-16 00:12:32"

ここで問題に取り掛かります。私は今、ログに記録された日時を含むログを編集する機能を提供しています。 iPhoneの「ピッカー」を使用するには、上記の文字列をJSの日付オブジェクトに再度変換する必要があります。これは通常、私のために物事をねじ込む。私は本質的に上記の日付を持つ新しい日付オブジェクトを作成する必要があります。タイムゾーンとdstは完全に無関係です。したがって、DBに保存すると、上記の文字列だけがユーザの要求に従って変更されます。彼らはペンシルベニアや中国で編集しているかどうかは関係ありません。同じログ日付を編集しています。

ご迷惑をおかけして申し訳ありません。私はこの全体の日付のものを考え出すのに苦労している。

+0

Dateオブジェクトには、複数のtoString()メソッドがあります。あなたの入力に暗黙的に使用されていた出力形式を使用するだけで、タイムゾーンの問題に陥ることはありません。 – Bergi

+0

この文字列をどのように印刷しようとしていますか?コンソールで 'new Date(...)'と入力するだけで、FirefoxとIE9の両方で正常に動作します。 "Fri Apr 13 2012 01:31:38"のように表示されます。 – casablanca

答えて

2

これはあなたの文字列によって異なります。その文字列がUTC時間の場合は、その文字列を解析する必要があります。現地時間の場合は、現地時間として解析する必要があります。あなたは、その部分のために、このようにヘルパーメソッドを行うことができます。

function getDate(utc, year, month, day, hour, minute, second) { 
    if(utc) { 
    var utc = Date.UTC(year, month - 1, day, hour, minute, second); 
    return new Date(utc); 
    } else {  
    return new Date(year, month - 1, day, hour, minute, second); 
    } 
} 

、あなたの文字列を解析するために、あなたがこれを使用することができます:

を:あなたは、たとえば次のように使用することができます

function fromString(utc, str) { 
    var parts = str.split(','); 

    var year = parts[0]; 
    var month = parts[1]; 
    var day = parts[2]; 
    var hour = parts[3]; 
    var minute = parts[4]; 
    var second = parts[5]; 

    return getDate(utc, year, month, day, hour, minute, second); 
} 

var d = fromString(true, '2012,02,13,00,31,38'); // If UTC 
var d = fromString(false, '2012,02,13,00,31,38'); // If local time 

は、ここでは、と遊ぶことができるという作業jsFiddleです:

また、日付を印刷する2つの方法(UTCまたはローカル)を示しています。お役に立てれば。

+0

それは助けになる、私は私が何か有用な仕事をすることができるかもしれないと思う。私は私のポストでこの必要性の私のアプリケーションに詳細を追加しました。 – livinzlife

+0

追加情報があれば、サーバー上の固定時間帯を使用することをお勧めします。UTCがおそらく最高です。あなたは通常、UTCになる文字列をサーバーから取り出し、上記のようにUTCとして解析し、クライアントの現地時間で必要に応じてすべての編集を行い、サーバーに送る直前にUTCに変換し直したいとします。 –

+0

私は今夜それをチェックし、そのコンボを私のために働かせることができるかどうかを見ます。これまでのところ助けてくれてありがとう! – livinzlife

0

私は同じ問題を抱えていました。

  1. 使用new Date(Date.UTC(2012,03,13,01,31,38))時間変化を避けるために:奇妙な時間変化のための2つの理由があります。
  2. 月はゼロベースであることに注意してください。!この関数の月は0から11までです。
関連する問題