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 |
え、シートに書いてあるまんまじゃん? って
やってみる
function show_date() {
var
sheet = SpreadsheetApp.getActiveSheet(),
values = sheet.getDataRange().getValues()
;
Logger.log(values[1][0]); //えーいままよ!
}
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 )
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
こうなるように頑張る。
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'));
}
2018-07-18(wed) 15:09
はい、残念~という気持ち。
日本語表記にしてあげよう
// 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'));
}
2018-07-18(水) 15:09
まとめ
Moment超便利、絶対覚えよう。
(GASという茨の道をいくなら。)