Google apps script 如何创建下拉时间选择
我想用Google Apps脚本创建一个类似Google日历的时间框,但是没有Google apps script 如何创建下拉时间选择,google-apps-script,Google Apps Script,我想用Google Apps脚本创建一个类似Google日历的时间框,但是没有createTimeBox方法,我该怎么办 使用createDateBox()方法我可以创建一个扩展日历选择,但我不知道如何创建一个下拉时间选择 我还没有找到有关创建下拉时间选择的UiApp方法与谷歌日历的From time相同您可以创建自定义的小时列表框、分钟列表框以及am/pm之间的选择。假设您想对日期+时间做进一步的操作,那么您需要将小时数和分钟数转换为毫秒,并将它们添加到date.getTime()中 如果您
createTimeBox
方法,我该怎么办
使用createDateBox()
方法我可以创建一个扩展日历选择,但我不知道如何创建一个下拉时间选择
我还没有找到有关创建下拉时间选择的
UiApp
方法与谷歌日历的From time相同您可以创建自定义的小时列表框、分钟列表框以及am/pm之间的选择。假设您想对日期+时间做进一步的操作,那么您需要将小时数和分钟数转换为毫秒,并将它们添加到date.getTime()中
如果您需要在用户的浏览器时区中向用户显示日期+时间-您需要知道他们的时间提前了多少,并在脚本属性中进行设置。除非有办法通过编程自动调整脚本时区…?这里是Bryan脚本的一个变体,有一个或两个小的改进来处理case hour=0,并且在日期框上有一个验证器,以防止在未选择日期时抛出错误
function doGet() {
var app = UiApp.createApplication();
var hpanel = app.createHorizontalPanel();
var dateBox = app.createDateBox().setId('dateBox').setName('dateBox');
var hour = app.createListBox(false).setId('hour').setName('hour')
for(h=0;h<13;++h){hour.addItem(h)}
var min = app.createListBox(false).setId('minute').setName('minute')
.addItem('00').addItem('15').addItem('30').addItem('45'); // ADD ALL THE MINUTES YOU WANT
var amPm = app.createListBox(false).setId('am').setName('amPm')
.addItem('AM').addItem('PM');
var dateTimeLabel = app.createLabel('',false).setId('dateTimeLabel');
var submit = app.createButton('Submit').setId('submit');
// SUBMIT HANDLERS
var handler1 = app.createClientHandler().validateMatches(dateBox, '2','g').forEventSource().setEnabled(false);
var handler2 = app.createServerHandler('showDate').validateMatches(dateBox, '2','g').addCallbackElement(hpanel);
submit.addClickHandler(handler1).addClickHandler(handler2);
hpanel.add(dateBox).add(hour).add(min).add(amPm).add(submit);
app.add(hpanel).add(dateTimeLabel);
return app;
}
function showDate(e) {
var app = UiApp.getActiveApplication();
var date = e.parameter.dateBox;
var timeZone = date.toString().substr(25,6)+":00"; // timezone of this date according to script TZ
var hour = Number(e.parameter.hour); // TURN INTO NUMBER
var min = Number(e.parameter.minute); // TURN INTO NUMBER
var amPm = e.parameter.amPm;
if (amPm == 'PM' ){hour = hour+12}; // ADD 12 HOURS TO PM HOURS
if (hour == 24){hour = 0 ;amPm='AM'}; // HANDLE 24 HOUR CORRECTLY
var newDate=new Date(date)
newDate.setHours(hour,min,0,0);//set hours minutes sec and milliSecs
var newDate = Utilities.formatDate(newDate, timeZone, 'MM/dd/yy hh:mm aaa');
app.getElementById('dateTimeLabel').setText(newDate);
app.getElementById('submit').setEnabled(true);
return app;
}
函数doGet(){
var app=UiApp.createApplication();
var hpanel=app.createHorizontalPanel();
var dateBox=app.createDateBox().setId('dateBox').setName('dateBox');
var hour=app.createListBox(false).setId('hour').setName('hour'))
对于(h=0;hdo你想要像google Cal一样的1/2小时分辨率?或者更多?或者更少?是的,与google Cal一样的1/2小时分辨率。你能帮我吗?谢谢!这段代码中似乎有一个小问题:如果你选择了00:15AM,它在dateTimeLabel中变成了12:15AM。另外,你应该在两个处理程序上都添加一个验证器,以防止在没有选择日期时出错。我认为it’我想输入的日期是附加到浏览器tz上的,但事实并非如此。我们仍然无法在不提前知道的情况下运行此操作并将日期显示回用户的浏览器tz,对吗?(即使以用户访问的方式运行)谢谢!但是我需要和谷歌日历的From time相同的。你只需要将hours/min/amPm组合到一个列表框中。我怎么做,你能给我一些例子吗,谢谢!谢谢!但是我需要和谷歌日历的From time相同的。我怎么做?你的意思是在同一个选择框中用半小时预设的小时和分钟吗?是的。还有一个半小时,就像谷歌日历一样。
function doGet() {
var app = UiApp.createApplication();
var hpanel = app.createHorizontalPanel();
var dateBox = app.createDateBox().setId('dateBox').setName('dateBox');
var hour = app.createListBox(false).setId('hour').setName('hour')
for(h=0;h<13;++h){hour.addItem(h)}
var min = app.createListBox(false).setId('minute').setName('minute')
.addItem('00').addItem('15').addItem('30').addItem('45'); // ADD ALL THE MINUTES YOU WANT
var amPm = app.createListBox(false).setId('am').setName('amPm')
.addItem('AM').addItem('PM');
var dateTimeLabel = app.createLabel('',false).setId('dateTimeLabel');
var submit = app.createButton('Submit').setId('submit');
// SUBMIT HANDLERS
var handler1 = app.createClientHandler().validateMatches(dateBox, '2','g').forEventSource().setEnabled(false);
var handler2 = app.createServerHandler('showDate').validateMatches(dateBox, '2','g').addCallbackElement(hpanel);
submit.addClickHandler(handler1).addClickHandler(handler2);
hpanel.add(dateBox).add(hour).add(min).add(amPm).add(submit);
app.add(hpanel).add(dateTimeLabel);
return app;
}
function showDate(e) {
var app = UiApp.getActiveApplication();
var date = e.parameter.dateBox;
var timeZone = date.toString().substr(25,6)+":00"; // timezone of this date according to script TZ
var hour = Number(e.parameter.hour); // TURN INTO NUMBER
var min = Number(e.parameter.minute); // TURN INTO NUMBER
var amPm = e.parameter.amPm;
if (amPm == 'PM' ){hour = hour+12}; // ADD 12 HOURS TO PM HOURS
if (hour == 24){hour = 0 ;amPm='AM'}; // HANDLE 24 HOUR CORRECTLY
var newDate=new Date(date)
newDate.setHours(hour,min,0,0);//set hours minutes sec and milliSecs
var newDate = Utilities.formatDate(newDate, timeZone, 'MM/dd/yy hh:mm aaa');
app.getElementById('dateTimeLabel').setText(newDate);
app.getElementById('submit').setEnabled(true);
return app;
}