Googleスクリプトでの基本的な日付操作


11

Googleスプレッドシートでカスタム関数を定義したいと思います。この関数は非常に単純なことを行うはずですが、どうすればよいかわかりません。Googleスクリプトで日付を処理することについて明確なリファレンスが見つからないため、私が読んだすべての回答に非常に混乱しています。

私が理解していることから、基本的な日付操作は以下で行うことができます:

  • new Date():私が理解していることから、それはいくつかのプロパティを持つオブジェクトを定義しています。セルの日付を使用して、そのようなオブジェクトとして変換する方法がわかりません。
  • Utilities.formatDate():これは、文字列として表示される日付の形式を変更するためのものです。
  • ライブラリMomenthttp://momentjs.com/

最後に、2つの日付(例:)を入力して、2つの日付31/01/2016の最大値を見つけ、最初の月を抽出するにはどうすればよいですか。

function myfun(date1,date2) {  
   // month = month of date 1
   // return maximum(date1,date2);  
}

誰かが日付の処理の概要を説明したり、良い参考資料を示したりできるかどうかにも興味があります。



ありがとうございました。他に方法はありませんか?たとえば、日付の月を抽出するのは信じられないほど複雑なようです!さらに、タイムゾーンを考慮する必要があります...単純な(固定された)日付操作では少しねじれます。
16年

公開されたケースのコードに焦点を当てた回答を追加しましたが、質問は2つの広範な(日付の操作)です。JavaScriptコードスニペットとオンラインコースを探すことから始めるべきでしょう。
ルベン・

@Rubénわかりました。「コードを書く」という質問をしたくなかったので、実際には見つけられなかった一般的な情報を探していました。あなたが示したSergei insasの投稿は役に立ちます。
アンデルスタンド2016年

JavaScriptに関する一般的な情報についてはdeveloper.mozilla.org/en-US/docs/Web/JavaScriptを、Google Apps Scriptについてはdeveloper.google.com/apps-scriptを参照してください。
ルベン・

回答:


14

日時値の取得と設定

スクリプトが.getValue()日付、日時、または期間としてフォーマットされたセルを呼び出すと、JavaScriptのDateオブジェクトが取得されます。次に、そのMDNページにリストされているさまざまなメソッドgetMonth()を、月を含むこのオブジェクトに適用できます。例:

  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

逆に、Dateオブジェクトをを使用してセルに割り当てるsetValueと、そのように自動的にフォーマットされます。

  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());

これ=date(2015,1,1)により、セルA1に数式が入力されます。結果は、スプレッドシートのタイムゾーンで2015-01-01 00:00:00になります。次に、スクリプトは日付を取得し、スクリプトの現地時間で時間を抽出します。タイムゾーンが一致する場合、ログに0.0が表示されます。


4

簡潔な答え

以下の2つのカスタム関数は、GoogleスプレッドシートとGoogle Appsスクリプトが日付を処理する方法の例として示されています。

例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メソッドがその役割を果たします。

結果として日付を取得するために注文した場合、日付オブジェクトはnew Date()を使用して作成されます。

2番目の例では、日付オブジェクトが変数に割り当てられ、次にgetMonth() JavaScriptメソッドを使用して月のインデックスが取得されます。JavaScript 0が開始要素に使用するの0は1月、12月などの場合であることを覚えておいてください。

参考文献


i)はdate1date2数値として渡されますか(通常:54243)?ii)date2使用しdate2.getMonth()た月を抽出しようとしましたが、セルが01/12/201510と11を返します02/12/2015。時間帯のせいだと思います。シート関数month()はとてもシンプルです。
16年

Googleスプレッドシートは日付をJavaScriptと同じシリアル番号として扱いますが、開始日はそれぞれ異なります。したがって、JavaScriptの日付関数を使用する場合は、最初にスプレッドシートの日付をJavaScriptの日付に変換する必要があります。すでにお気づきのとおり、より簡単な方法は、スプレッドシート関数を使用してスプレッドシートの日付を処理し、JavaScript関数を使用してJavaScriptの日付を処理することです。
ルベン・

@anderstood:2つ目の例を追加しました。
ルベン・

ありがとうございました。2番目の例については、私が書いたように、最大​​値が2015 myfunction2年12月12日の場合は10を返し、最大値が2015年12月12日の場合は11を返します。11で問題ありませんが、理解できません。なぜ2015年12月1日の10が返されますか。私が言ったように、これはGMTのせいだと思いますが、よくわかりません。何か不足していますか?
16年

@anderstood:デモ用のスプレッドシートを作成して、閲覧のみのリンクを知っている人と共有し、デモ用スプレッドシートへのリンクを含む新しい質問を投稿します。
ルベン・
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.