GoogleカレンダーのFrom timeのようなTimeBoxをGoogle Apps Scriptで作成したいのですがcreateTimeBox
方法がありません。
メソッドを使用createDateBox()
して、拡張カレンダー選択を作成できましたが、ドロップダウン時間選択を作成する方法がわかりません。
UiApp
Google カレンダーの [開始時間] と同じドロップダウン時間選択を作成する方法が見つかりませんでした
GoogleカレンダーのFrom timeのようなTimeBoxをGoogle Apps Scriptで作成したいのですがcreateTimeBox
方法がありません。
メソッドを使用createDateBox()
して、拡張カレンダー選択を作成できましたが、ドロップダウン時間選択を作成する方法がわかりません。
UiApp
Google カレンダーの [開始時間] と同じドロップダウン時間選択を作成する方法が見つかりませんでした
時間のカスタム リスト ボックス、分のリスト ボックス、および午前/午後の選択を作成できます。日付と時刻でさらに何かをしたいと仮定すると、時間と分の数をミリ秒に変換し、date.getTime() に追加する必要があります。
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')
.addItem(1).addItem(2).addItem(3); // ADD ALL THE HOURS YOU WANT
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().forEventSource().setEnabled(false);
var handler2 = app.createServerHandler('showDate').addCallbackElement(hpanel);
submit.addClickHandler(handler1).addClickHandler(handler2);
hpanel.add(dateBox).add(hour).add(min).add(amPm).add(submit).add(dateTimeLabel);
app.add(hpanel);
return app;
}
function showDate(e) {
var app = UiApp.getActiveApplication();
var date = e.parameter.dateBox;
var timeZone = date.toString().substr(25,6)+":00"; // SCRIPT TIME ZONE
var dateMilli = date.getTime(); // GET MILLISECONDS OF DATE PICKED
var hour = parseInt(e.parameter.hour); // TURN INTO NUMBER
var amPm = e.parameter.amPm;
if (amPm == 'PM' && hour != 12) hour = hour + 12; // ADD 12 HOURS TO PM HOURS, EXCEPT 12PM
if (hour == 12 && amPm == 'AM') hour = 0; // HANDLE 12AM HOUR CORRECTLY
var hourMilli = hour * 3600000; // # OF MILLISECONDS IN 1 HOUR
var minMilli = parseInt(e.parameter.minute) * 60000; // # OF MILLISECONDS IN 1 MIN
var milliTotal = dateMilli + hourMilli + minMilli; // ADD ALL MILLISECOND TOGETHER
// PUT TOTAL MILLISECONDS INTO A NEW DATE AND CREATE CUSTOM FORMAT
// THIS MIGHT NOT BE THE USER'S BROWSER TIME ZONE
var newDate = Utilities.formatDate(new Date(milliTotal), timeZone, 'MM/dd/yy hh:mm aaa');
app.getElementById('dateTimeLabel').setText(newDate);
app.getElementById('submit').setEnabled(true);
return app;
}
ブラウザのタイムゾーンで日付と時刻をユーザーに表示する必要がある場合は、事前にそれを知り、スクリプトのプロパティで設定する必要があります。スクリプトのタイムゾーンをプログラムで自動的に調整する方法がない限り...?
これは、ケース hour=0 を処理するための 1 つまたは 2 つの小さな改善と、日付が選択されていない場合にエラーがスローされるのを防ぐための dateBox のバリデーターを備えた Bryan のスクリプトの変形です。
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;
}