2012-06-24 14 views
11

の2つの日付を比較するにはどうすればよいでしょう2つの日付を比較するGoogleアプリのスクリプト

var int = e.parameter.intlistbox; 
var startDate = rSheet.getRange(parseInt(int) + 1 ,1).getValues(); 
// returns Sat Jun 30 2012 00:00:00 GMT-0300 (BRT) 
var toDay = new Date(); 
// Sat Jun 23 2012 22:24:56 GMT-0300 (BRT) 

if (startDate > toDay){ .... 

私は.toString()オプションを見ましたが、これは==または===演算子のみで動作するようです。

この問題については何も明らかですか?

+0

それはあなたが比較したいものによって異なります。あなたは比較したい日付はどうですか? – mzimmerman

答えて

3

日付オブジェクトは、他の変数と同様に比較することができます。たとえば、同じ日に2つの日付を比較し、日付A =日付Bを取得する必要がある場合、この場合、日付には時間と分(および秒+ミリ秒)も含まれているため、問題があります。 (私はあなたが参照している投稿の平等をチェックするために文字列を使うことを提案したのです)。 両方の変数で時間、分、秒、およびミリ秒を0に設定して、比較が日、月、年のみに行われるようにすることができます。 これを行うには、w3schools date reference pageを参照してください。

もう一つの可能​​性はあなたが必要とするデータを取得するためにUtilities.formatDate()を使用して文字列に両方の日付を変換し、substrings()でプレーするだろうが、私はこれを続行するために非常にエレガントな方法ではないと思います;-)

18

Dateオブジェクトが持っていますvalueOf 1970-01-01午前0時からのミリ秒数を返すメソッドです。これを使用して日付を比較することができます。誰かがしばらく前にこの投稿を

var date01 = new Date(); 
var date02 = new Date(2012, 5, 24); 
if (date01.valueOf() > date02.valueOf()) { 
    .... 
} 
+0

これはどうやって分かりますか?どのタイプ(どのライブラリから)の日付ですか?そのドキュメントにリンクできますか? – dinosaur

+0

@dinosaur、私は 'var d0 = new Date(0);のようなコードを実行することでそれを知っています。 var d1 =新しい日付(1); var str0 = d0.toISOString(); var str1 = d1.toISOString(); '。実行されるとすぐに、str0は '1970-01-01T00:00:00.000Z'の値を持ち、str1は' 1970-01-01T00:00:00.001Z'を持ちます。このコードはGAS環境で実行されます。私は、GASには、JSから継承したDateやその他の基底クラスのドキュメントがないと仮定します。同様の方法で、GASのドキュメントでStringクラスへの参照を見つけることができません。 – megabyte1024

+0

JavaScriptの月は0から始まり、しばらくの間それにこだわりました... –

9

ような何か、私はそれは私が、arroundの少し仕事をしたので、魅力的ではないが、仕えるようだ

function testDate() { 
    var futureDate = new Date('8/31/2020'); 
    var todayDate = new Date(); 
    Logger.log(DateDiff.inMonths(todayDate, futureDate)); 
    Logger.log(DateDiff.inYears(todayDate, futureDate));    
} 

var DateDiff = {  
    inDays: function(d1, d2) { 
     var t2 = d2.getTime(); 
     var t1 = d1.getTime(); 

     return parseInt((t2-t1)/(24*3600*1000)); 
    }, 
    inWeeks: function(d1, d2) { 
     var t2 = d2.getTime(); 
     var t1 = d1.getTime(); 

     return parseInt((t2-t1)/(24*3600*1000*7)); 
    }, 
    inMonths: function(d1, d2) { 
     var d1Y = d1.getFullYear(); 
     var d2Y = d2.getFullYear(); 
     var d1M = d1.getMonth(); 
     var d2M = d2.getMonth(); 

     return (d2M+12*d2Y)-(d1M+12*d1Y); 
    }, 
    inYears: function(d1, d2) { 
     return d2.getFullYear()-d1.getFullYear(); 
    } 
} 
1

非常に便利です見つけます。

var startDate = rSheet.getRange(parseInt(int) + 1 ,1).getValues(); 
var toDay = new Date(); 

var sYyyy = Utilities.formatDate(new Date(startDate), "GMT-2","yyyy"); 
var sMm = Utilities.formatDate(new Date(startDate), "GMT-2","MM"); 
var sDd = Utilities.formatDate(new Date(startDate), "GMT-2","dd"); 

var tYyyy = Utilities.formatDate(new Date(toDay), "GMT-2","yyyy"); 
var tMm = Utilities.formatDate(new Date(toDay), "GMT-2","MM"); 
var tDd = Utilities.formatDate(new Date(toDay), "GMT-2","dd"); 


if (sYyyy + sMm + sDd > tYyyy + tMm + tDd) {.... 

また、私は他の回答もチェックして、それをスピンアップします。

4
// Date, Date -> Number 
// Get the number of days between two dates 

test("Date Diff In Days", 5, function(){ 
    ok(DateDiffInDays(new Date("January 1, 2000"), new Date("January 1, 2000")) == 0, "Ok"); 
    ok(DateDiffInDays(new Date("January 1, 2000"), new Date("January 2, 2000")) == 1, "Ok"); 
    ok(DateDiffInDays(new Date("January 1, 2000"), new Date("January 11, 2000")) == 10, "Ok"); 
    ok(DateDiffInDays(new Date("January 11, 2000"), new Date("January 1, 2000")) == -10, "Ok"); 
    ok(DateDiffInDays(new Date("January 1, 2000"), new Date("April 10, 2000")) == 100, "Ok"); 
}); 


function DateDiffInDays(a, b) 
{ 
    var _MS_PER_DAY = 1000 * 60 * 60 * 24; 
    // Discard the time and time-zone information. 
    var utc1 = Date.UTC(a.getFullYear(), a.getMonth(), a.getDate()); 
    var utc2 = Date.UTC(b.getFullYear(), b.getMonth(), b.getDate()); 
    return Math.floor((utc2 - utc1)/_MS_PER_DAY); 
} 
3

うわー、私はここに遅れています。日付を整数の日に変換するのが最も簡単だと分かった。だから、月1日は1になり、2月1日には、ここ32など

だろうというスクリプトです:

today = parseInt(Utilities.formatDate(new Date(),"EST","D")); 

スプレッドシートから値をつかんでいる場合は、単に新しい日付に価値を置きます():

today = parseInt(Utilities.formatDate(new Date(rSheet.getRange(parseInt(int) + 1 ,1).getValues()),"EST","D")); 
関連する問題