LoginSignup
2
2

More than 3 years have passed since last update.

[GAS] スプレッドシートに記載されている日付をMoment.jsでいじる

Last updated at Posted at 2019-12-07

Spreadsheets/Excel Advent Calendar 2019の8日目でございます。

前提

Google Apps Scriptでは、Moment.jsが使える。
これは、とっても便利ちゃん。

日付&時刻の便利ライブラリ「Moment.js」をGoogle Apps Scriptで使う方法

やりたいこと

下記、テーブルがあって、これを
2018-07-18(水) 15:09
みたいな書式にして出力したい。

タイムスタンプ メールアドレス
2018/07/18 15:09:03 maeshow@gmail.com

え、シートに書いてあるまんまじゃん? って

やってみる

show_data.js
function show_date() {
  var
    sheet = SpreadsheetApp.getActiveSheet(),
    values = sheet.getDataRange().getValues()
  ;
  Logger.log(values[1][0]); //えーいままよ!
}
result.txt
Wed Jul 18 15:12:02 GMT+09:00 2018

え・・・なんで?

javascriptのdateオブジェクトになるらしい。
困った~。
というのも、JSのDateオブジェクトは扱いが厄介だから。
少なくとも、私は苦しんだ。二度と、そのまま触るまいと心に決めている。

Momentで扱いたい!!

Momentオブジェクトという日付の扱いをめちゃめちゃ簡単にしてくれるものが存在している。

Unixタイムスタンプに変換してしまおう

Dateオブジェクト → Momentオブジェクトの変換は、もっとスマートなやり方があるのかもしれないけれど、とりあえずUnixタイムスタンプ経由させればいけるぜ!
というわけで、Moment.moment.unic(<unix_time_stamp>)を使いたい。
魔法の呪文のご紹介~。
Math.round( <date>.getTime() / 1000 )

translate_by_Moment.js
function show_date() {
  var
    sheet = SpreadsheetApp.getActiveSheet(),
    values = sheet.getDataRange().getValues()
  ;
  var
    date = values[1][0],
    unix_time_stamp = Math.round( date.getTime() / 1000 ),
    mm = Moment.moment.unix( unix_time_stamp )
  ;
  Logger.log(mm); //オブジェクトが表示されるはず
}

書式をつけてあげよう

<moment object>.format('hoge') という感じ。
2018-07-18(水) 15:09こうなるように頑張る。

show_date.js
function myFunction() {
  var
    sheet = SpreadsheetApp.getActiveSheet(),
    values = sheet.getDataRange().getValues()
  ;
  var
    date = values[1][0],
    unix_time_stamp = Math.round( values[1][0].getTime() / 1000 ),
    mm = Moment.moment.unix( unix_time_stamp )
  ;
  Logger.log(mm.format('YYYY-MM-DD(ddd) HH:mm'));
}
result.text
2018-07-18(wed) 15:09

はい、残念~という気持ち。

日本語表記にしてあげよう

show_date_with_Japanes.js
// Momentを日本語設定に
Moment.moment.lang('ja', {
        weekdays: ["日曜日","月曜日","火曜日","水曜日","木曜日","金曜日","土曜日"],
        weekdaysShort: ["","","","","","",""]});

function show_date_with_Japanes() {
  var
    sheet = SpreadsheetApp.getActiveSheet(),
    values = sheet.getDataRange().getValues()
  ;
  var
    date = values[1][0],
    unix_time_stamp = Math.round( values[1][0].getTime() / 1000 ),
    mm = Moment.moment.unix( unix_time_stamp )
  ;
  Logger.log(mm.format('YYYY-MM-DD(ddd) HH:mm'));
}
result.text
2018-07-18(水) 15:09

まとめ

Moment超便利、絶対覚えよう。
(GASという茨の道をいくなら。)

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2