1

在以下情况下,日期比较无法正常工作。我正在比较两个日期。第一个工作得很好,第二对比较有问题:

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;
 }

上面代码中的开始日期经过完美比较,适用于所有情况,即等于、大于和小于。但是结束日期(edt 和 tedt)不会返回大于一周的日期值到 2014 年 6 月 3 日的样本日期的正确结果。这意味着如果输入 2014 年 6 月 10 日或任何其他日期,直到月底,那么它返回 Smaller 作为结果,这不应该是这种情况。

有人可以帮我解决这个问题吗

4

1 回答 1

3

在 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 ")}
 }
于 2014-06-06T01:18:29.150 回答