Googleスプレッドシートでカスタム関数を定義したいと思います。この関数は非常に単純なことを行う必要がありますが、その方法を見つけることができませんでした。 Googleスクリプトで日付を処理するための明確な参照が見つからないため、読んだすべての回答と非常に混同されています。
私が理解していることから、基本的な日付操作は次のようにして行うことができます:
new Date()
:私が理解していることから、いくつかのプロパティを持つオブジェクトを定義しています。セルの日付を使用して、そのようなオブジェクトとして変換する方法がわかりません。Utilities.formatDate()
:これは、stringとして表示される日付の形式を変更します。Moment
( http://momentjs.com/ )最後に、2つの日付(例:31/01/2016
)を入力し、2つの日付の最大値を見つけて、最初の日付の月を抽出するにはどうすればよいですか?
function myfun(date1,date2) {
// month = month of date 1
// return maximum(date1,date2);
}
また、誰かが日付の処理の概要を説明したり、適切な参照を示したりできるかどうかにも興味があります。
スクリプトは、日付、日時、または期間としてフォーマットされたセルで.getValue()
を呼び出すたびに、 JavaScript Dateオブジェクト を取得します。その後、その月のgetMonth()
など、MDNページにリストされているさまざまなメソッドをこのオブジェクトに適用できます。例:
var sheet = SpreadsheetApp.getActiveSheet();
var value = sheet.getRange('A1').getValue(); // is a Date object
Logger.log([value.getMonth(), value.getHours(), value.getUTCHours()]);
// examples of available methods
逆に、setValue
を使用してDateオブジェクトをセルに割り当てると、そのように自動的にフォーマットされます。
sheet.getRange('B2').setValue(new Date()); // current timestamp
Googleスプレッドシートのタイムスタンプはローカルタイムゾーンであり、[ファイル]> [スプレッドシートの設定]で設定します。スクリプトは、タイムゾーン内でも動作します。タイムゾーンは 異なる場合があります で、スクリプトエディターの[ファイル]> [プロジェクトプロパティ]にあります。これらのタイムゾーンが一致しない場合、タイムスタンプに問題があります。
タイムゾーンが一致しているかどうかを確認するには、両方を手動で比較するか、次のようなことを行います。
var sheet = SpreadsheetApp.getActiveSheet();
sheet.getRange('A1').setFormula('=date(2015,1,1)');
Logger.log(sheet.getRange('A1').getValue().getHours());
これにより、セルA1に式=date(2015,1,1)
が入力されます。結果は、スプレッドシートのタイムゾーンで2015-01-01 00:00:00になります。次に、スクリプトは日付を取得し、スクリプトの現地時間で時間を抽出します。タイムゾーンが一致する場合、ログに0.0が表示されます。
以下の2つのカスタム関数は、GoogleスプレッドシートとGoogle Appsスクリプトが日付でどのように機能するかの例として提示されています。
function myFunction(date1,date2) {
return new Date(Math.max(date1,date2))
}
function myFunction2(date1,date2) {
var date = new Date(Math.max(date1,date2));
return date.getMonth();
}
最初の例では、 Math.max JavaScriptメソッドがジョブを実行します。
結果として日付を取得する場合、new Date() を使用して日付オブジェクトが作成されます。
2番目の例では、日付オブジェクトを変数に割り当ててから、 getMonth() JavaScriptメソッドを使用して月のインデックスを取得します。 JavaScriptは開始要素に0
を使用するため、0
は1月、1
は2月などに使用されることに注意してください。