1

以下の場合、日付比較が正しく動作しません。2つの日付のセットを比較しています。最初のものは完全に正常に動作しますが、2 番目のペアの比較に問題があります。

function doGet(e){
var app = UiApp.createApplication();
var grid = app.createGrid(4, 3).setStyleAttributes({'margin':'20'});
grid.setWidget(0, 0, app.createLabel('User ID:'));
grid.setWidget(0, 1, app.createTextBox().setName('idBox').setId('idBox'));
grid.setWidget(1, 0, app.createLabel('From Date:'));
grid.setWidget(1, 1, app.createTextBox().setName('sDate').setId('sDate'));
grid.setWidget(2, 0, app.createLabel('To Date:'));
grid.setWidget(2, 1, app.createTextBox().setName('eDate').setId('eDate'));
createDatePicker(app);//date picker function works perfectly fine(used for selecting dates from calendar)

var dhandler = app.createServerHandler('pickDate');
app.getElementById('sDate').addClickHandler(dhandler);
app.getElementById('eDate').addClickHandler(dhandler);


var panel = app.createVerticalPanel().setId('settingsPanel');

panel.add(app.createLabel('Enter UserID:');

panel.add(grid);

var button = app.createButton('Search').setId('search');
var handler = app.createServerClickHandler('_searchUser');
handler.addCallbackElement(grid);
button.addClickHandler(handler);

grid.setWidget(3, 1, button);
app.add(panel);

return app;
}


function _searchUser(e){
var app = UiApp.getActiveApplication();

var id = e.parameter.idBox;
var sdt = Utilities.formatDate(new Date(e.parameter.sDate), "PST",                   'M/d/YYYY').toString();
var edt = Utilities.formatDate(new Date(e.parameter.eDate), "PST", 'M/d/YYYY').toString();

 app.add(app.createLabel("ID entered: "+id));
 app.add(app.createLabel("Start Date: "+sdt));
 app.add(app.createLabel("End Date: "+edt));



 var tsdt = Utilities.formatDate(new Date("6/1/2014"), "PST", "M/d/YYYY");//just for example
 var tedt = Utilities.formatDate(new Date("6/3/2014"), "PST", "M/d/YYYY");//just for example
 app.add(app.createLabel("Sample Start Date compared to: "+tsdt));
 app.add(app.createLabel("Sample End Date Compared to: "+tedt));

 if(sdt == tsdt){app.add(app.createLabel("Start Date: EQUAL "))}
 if(sdt > tsdt){app.add(app.createLabel("Start Date: Greater "))}
 if(sdt < tsdt){app.add(app.createLabel("Start Date: Smaller "))}

 if(edt == tedt){app.add(app.createLabel("End Date : EQUAL "))}
 if(edt > tedt){app.add(app.createLabel("End Date: Greater "))}
 if(edt < tedt){app.add(app.createLabel("End Date: Smaller "))}
 return app;
 }

上記のコードの開始日は完全に比較され、すべてのケース、つまり EQUAL to、Greater than、Smaller than で機能します。しかし、終了日 (edt および tedt) は、サンプル日付 (2014 年 6 月 3 日) から 1 週間を超える日付の値に対して正しい結果を返しません。つまり、2014 年 6 月 10 日または月末までの日付が入力された場合、結果として Smaller が返されますが、そうではありません。

誰でもこれで私を助けてくれますか

4

1 に答える 1

3

Apps Script で日付を操作すると、混乱することがあります。知っておく必要があるのは、最初に通常の JavaScript で日付を操作し、次にユーティリティを使用して日付のみをフォーマットすることです。ここでの問題は、1970 年 1 月 1 日から、後で読むことがたくさんある .getTime() が特定の日付に対して与えるものであるミリ秒単位での計算がはるかに簡単であることです。

ここに動作するサンプルがあります

function _searchUser(e){

//var id = e.parameter.idBox;
var sdt = new Date('6/1/2014').getTime();
var edt = new Date('6/15/2014').getTime();


 var tsdt = new Date("6/1/2014").getTime()//just for example
 var tedt = new Date("6/3/2014").getTime()//just for example

 if(sdt == tsdt){Logger.log("Start Date: EQUAL ")}
 if(sdt > tsdt){Logger.log("Start Date: Greater ")}
 if(sdt < tsdt){Logger.log("Start Date: Smaller ")}

 if(edt == tedt){Logger.log("End Date : EQUAL ")}
 if(edt > tedt){Logger.log("End Date: Greater ")}
 if(edt < tedt){Logger.log("End Date: Smaller ")}
 }
于 2014-06-06T01:18:29.150 に答える