0

2 つの日付を相互に比較するスクリプトがあります。しかし、どちらも異なる方法で入ってきます。月/日/年の文字列形式に変換してから、日付形式に変換したもの。もう 1 つは、既に日付形式になっている Google スプレッドシートのセルに直接使用されます。しかし、それらを比較すると、日付が比較範囲内であっても機能しません。これが私のコードです:

 function formatDate(someDate){
  var x = someDate.split("T");
  var v = x[0].split("-");
  var newDate = new Date();
  newDate.setFullYear(v[0],(v[1]-1),v[2]);
  //var newDate = v[1]+"/"+ v[2]+"/"+v[0];

  return newDate;
  }

 //calling formatDate within another function
 if(startDate != ''){
    if(singleCard[j].date != undefined){
      var k = singleCard[j].date;
      var f = formatDate(k);
      var dt = new Date(f);

 if(dt >= startDate && dt <= endDate){  //date comparison
   //do something here
 }

開始日と終了日は次の形式で表示されます。

    Fri Oct 12 2012 00:00:00 GMT-0700 (PDT)

singleCard[j].date は文字列として入ってきます:

    "2012-10-12T16:57:51.517Z"

そして、私は使用します:

   var f = formatDate(date) -> var dt = new Date(f)

それを処理します。
ここで何が間違っているのかわかりません。ありがとう。

4

1 に答える 1

0

あなたがするとき

var newDate = v[1]+"/"+ v[2]+"/"+v[0];

年 / 月 / 日 を正しい順序で使用していますか?

の結果をログに記録して、var dt = new Date(f);その値を日付オブジェクトとして表示しようとしましたか?

私の質問が明白に思われる場合は申し訳ありませんが、日付のローカル設定がわからないため、どのように処理するかわかりません.(私はdd / mm / yyyyを使用する国にいるので、慣れていますそれに問題があります;)

編集:あなたのコメントを見ました...そうではないはずですv[0]+"/"+ v[1]+"/"+v[2](yyyy/mm/dd)

EDIT 2 : setFullYear(); を使用するときは、 hh mm ss パラメータも指定する必要があると思います。

何かのようなもの

 newDate.setFullYear(v[0],(v[1]-1),v[2],0,0,0,0);

それを機能させるために。また、hh mm ss と mSec を 0 に設定する必要があります (必須とさえ言えます)。and の比較を使用<=しているためです。>=生活。

日付オブジェクトは、表示/使用しない場合でも、常に時刻付きの完全な日付であることを忘れないでください。

于 2012-10-12T19:35:28.443 に答える