4

わかりました、javascript のタイムスタンプを php に相当するものに変換しようとしています。適切な回答と他のさまざまなサイトを求めてスタック上の投稿を閲覧したので、この質問は投票が減る可能性が高いことを知っていても、最後の溝の努力として来ます。そして、これ以上何も言わない人は、どこかからのだまされた質問です。だからそれにもかかわらず..

これは、これまでの試みの私の失敗です。私は jQuery を使用していることに注意してくださいj$

var yr = j('#time_year :selected').val();//year
var mn = j('#time_month :selected').val();//month
var dy = j('#time_day :selected').val();//day
var hr = j('#time_hour :selected').val();//hour
var min = j('#time_minute :selected').val();//minute
var sc = j('#time_second :selected').val();//second

if(j('#time_ampm :selected').val() == 12 && j('#time_hour :selected').val() < 12){hr = j('#time_hour :selected').val()+12;}
if(j('#time_ampm :selected').val() == 0 && j('#time_hour :selected').val() == 12){hr = 0;}

var theDate = new Date(yr, mn, dy, hr, min, sc).getTime();
setTimeStamps(theDate);
j('#timestamp_now_js').html(" "+theTime);
j('#timestamp_now_php').html(" "+Math.round(theTime / 1000));

上部の選択値は、Mozilla.org の日付参照に基づいており、説明どおりに 0-nn を使用しています。am/pm if-else は基本的に、サイトに表示される時刻が 12 時間形式であるため、選択された時刻に 12 時間を追加することを意味します。Javascript は 24 時間を使用します。また、am を選択して 12 を使用すると、12 が 0 に変換されて 24 時間形式の概念に一致する場合もあります。

現在起こっているように見えるのは、動作しているように見えますが、phpdate()関数を介して指定されたタイムスタンプを実行すると、約 1 か月 2 週間、テスト対象の数日先の日付が表示されるということです。今に相当する

含まれているすべての html の jsFiddle を作成しますが、php を使用して選択ボックスを生成します。それで、私が「ライブ」に持っているものを見たい場合は、http://7pz.net/timestamps.phpにアクセスしてください。そこで私はコンセプトをテストしています。

4

1 に答える 1

2

これは、Javascript のDateオブジェクトでは、月の範囲が 1 ~ 12 ではなく、0 ~ 11 であるためです。それは「月」の部分です。これを試して:

var mn = j('#time_month :selected').val() - 1; //month

または、<option>0 から 11 の範囲の値で s を生成することをお勧めします。

さらに、この声明:

hr = j('#time_hour :selected').val()+12;

これは数値ではなく文字列j('#time_hour :selected').val()であることを忘れないでください。したがって、12 を追加する前に変換する必要があります。時間カウントを 412、つまり 17 日と 4 時間に設定して日付を作成しています。また、17 日が 1 日カウントに追加されます。"0412"

次のように修正します。

hr = +j('#time_hour :selected').val() + 12;

プラス単項演算子を使用しました。

(追伸: 読みやすさと jQuery オブジェクトのキャッシングから始めて、コードを改善する余地はたくさんあります。いくつかの悪い習慣に慣れる前に、Javascript のコーディング スキルを改善する時間をとってください。)

于 2012-09-01T20:28:10.757 に答える