日期比较Google应用脚本的问题

时间:2014-06-05 16:04:26

标签: google-apps-script date-comparison

在以下情况下,日期比较无法正常工作。我正在比较两个日期的集合。第一个工作完全正常,第二对比较有问题:

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,大于和小于。 但是结束日期(edt和tedt)不会将日期值超过一周的正确结果返回到2014年6月3日的样本日期。这意味着如果输入6月20日或月份之前的任何其他日期,则返回较小的结果,但不应该是这种情况。

任何人都可以帮我解决这个问题

1 个答案:

答案 0 :(得分:2)

使用Apps脚本中的日期有时会让人感到困惑。您需要知道的是在普通javascript中首先使用日期,然后使用实用程序仅格式化日期以进行查看。这里的问题是数学在毫秒内更加容易,这就是.getTime()为你提供了一个给定的日期,从1970年1月1日起,有很多内容可供阅读。

这是一个有效的样本

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 ")}
 }