2011年12月7日水曜日

google apps scriptの日付シリアルをgoogleスプレッドシート用に変換する

google apps scriptはjavascriptの拡張。

google スプレッドシートはMS EXCEL準拠らしい。

日付シリアルをgoogleスプレッドシートに保存したかったので
new Date().getTime()でそのままセルに挿入したところ
うまくいかなかったので、いろいろ調べてみた。

・javascriptは1970年1月1日からのシリアル値だそうで
単位はミリ秒。

1秒は1000。

・MSエクセルは1900年1月1日からのシリアル値で
単位は1日が「1」
 1秒は1/86400。 (86400は1日の秒数)
・・・・時間は小数点以下9桁入るらしい

ってことは1970/01/01 0:00:00 をシリアル値にすると25569

google apps script上でnew Date().getTime()値を出してみたら
時差のないシリアル値らしきものが出てきたので

var s = new Date().getTime() +  (1000 * 60 * 60 * 9);
で日本時間(+9)のJSシリアル値が出来る。
その値を一日の(MSエクセル)シリアル値(1000 * 60 * 60 * 24)で割る。
そこから1970/01/01 0:00:00 のMSエクセルシリアル値、25569を加えた数字をgoogle spreadsheetのセルに代入。

セルの書式を日付フォーマットにしたところうまく出来たようだ。

=((現在のJSシリアル値) + (時差)) / (MSエクセルの1日のシリアル値) + (1970年1月1日のMSエクセルシリアル値)
=(new Date().getTime() + (1000 * 60 * 60 * 9)) / (1000 * 60 * 60 * 24) + 25569

 と、こんな式になる。

もっと楽な計算式あるかもしれないけどとりあえず^^;

0 件のコメント: