Googleスプレッドシートでカスタム関数を定義したいと思います。この関数は非常に単純なことをするはずですが、私はそれを行う方法を見つけることができませんでした。 Googleスクリプトで日付を処理するための明確なリファレンスが見つからないため、読んだすべての回答に非常に混乱しています。
私が理解していることから、基本的な日付操作は次の方法で実行できます。
-
new Date()
:私が理解していることから、いくつかのプロパティを持つオブジェクトを定義しています。セルの日付を使用して変換する方法がわかりません。そのようなオブジェクトとして。 -
Utilities.formatDate()
:これは文字列として表示される日付の形式を変更するためのものです。 - ライブラリ
Moment
( http://momentjs.com/ )
最後に、2つの日付(31/01/2016
など)を入力して、2つの間の最大値を見つけ、最初の月を抽出するにはどうすればよいですか。 1つですか?
function myfun(date1,date2) { // month = month of date 1 // return maximum(date1,date2); }
誰かが日付の扱いの概要を説明したり、適切な参照を示したりできるかどうかにも興味があります。
コメント
- answer by Sergei insas to 正しい時間値の読み方Googleスプレッドシートから
- ありがとうございます。他に方法はありませんか? 'は、たとえば日付の月を抽出するのが非常に複雑に思えます。さらに、タイムゾーンを考慮に入れる必要があります… '単純な(固定)日付操作のために少しねじれています。
- に焦点を当てた回答を追加しました公開されたケースのコードですが、問題は2つあります(日付操作)。 JavaScriptコードスニペットとオンラインコースを探すことから始めるべきかもしれません。
- @Rub é nわかりました。 "コードを書いて"の質問をしたくなかったので、実際には見つからなかった一般的な情報を探していました。 Sergei insas 'の投稿は役に立ちます。
- JavaScriptに関する一般的な情報については、 developer.mozillaを参照してください。 org / en-US / docs / Web / JavaScript およびGoogleApps Scriptについては、 developers.google.com/apps-script を参照してください。
回答
日時値の取得と設定
スクリプトが日付、日時、または期間としてフォーマットされたセルでは、 JavaScriptDateオブジェクトを取得します。次に、その月の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、1、1のようなセルの束をチェックしたい30、20).getValues;-それを実現する方法は?
回答
短い回答
以下の2つのカスタム関数は、GoogleSheetsとGoogleAppsScriptが日付を処理する方法の例として示されています。
例1:最新の日付を取得する
function myFunction(date1,date2) { return new Date(Math.max(date1,date2)) }
例2:最新の日付の月を取得します
function myFunction2(date1,date2) { var date = new Date(Math.max(date1,date2)); return date.getMonth(); }
簡単な説明
最初の例では、 Math.max JavaScriptメソッドがその役割を果たします。
日付を結果として取得するように注文した場合lt、日付オブジェクトは新しい Date()を使用して作成されます。
2番目の例では、日付オブジェクトが変数に割り当てられます。 、次に、 getMonth() JavaScriptメソッドを使用して月のインデックスを取得します。JavaScriptは開始要素に0
を使用するため、0
は1月の1
2月など。
参照
コメント
- i)
date1
、date2
は番号として渡されますか(通常:54243)? ii)date2
の月をdate2.getMonth()
を使用して抽出しようとしましたが、セルが01/12/2015
02/12/2015
に対して10と11を返します。タイムゾーンのせいで'だと思います。シート関数month()
は非常にシンプルです。 - Googleスプレッドシートは、JavaScriptと同じようにシリアル番号として日付を処理しますが、開始日はそれぞれ異なります。したがって、JavaScriptの日付関数を使用する場合は、最初にスプレッドシートの日付をJavaScriptの日付に変換する必要があります。すでにお気づきのように、より簡単な方法は、スプレッドシート関数を使用してスプレッドシートの日付を処理し、JavaScript関数を使用してJavaScriptの日付を処理することです。