moment-timezone のバージョンが古くてサマータイムの切り替わりで日付処理がバグった

Moment Timezone の古いバージョンを使っていて、先日のサマータイムの終了日時 2016年11月6日(日)02時00分 PDT を境目に UTC から PDT/PST への変換がバグってしまう問題にぶち当たった。

結果的には、使っていた moment-timezone のバージョンが古かったので、バージョンを最新にしたことで解決しました。

moment-timezone@0.0.3 を使った場合

超古いバージョン 0.0.3 を利用した場合、タイムゾーン America/Los_Angeles で 2016-11-07 のその日の終わりの日時を正しく取得することができません。

> var now = new Date("2016-11-09 17:30:00")
> var moment = require("moment-timezone")
 
> moment(now).tz("America/Los_Angeles").endOf("day").utc().format('YYYY-MM-DD HH:mm:ss')
'2016-11-10 07:59:59'
> moment(now).subtract(1, "days").tz("America/Los_Angeles").endOf("day").utc().format('YYYY-MM-DD HH:mm:ss')
'2016-11-09 07:59:59'
> moment(now).subtract(2, "days").tz("America/Los_Angeles").endOf("day").utc().format('YYYY-MM-DD HH:mm:ss')
'2016-11-08 07:59:59'
> moment(now).subtract(3, "days").tz("America/Los_Angeles").endOf("day").utc().format('YYYY-MM-DD HH:mm:ss')
'2016-11-06 07:59:59'
> moment(now).subtract(4, "days").tz("America/Los_Angeles").endOf("day").utc().format('YYYY-MM-DD HH:mm:ss')
'2016-11-06 06:59:59'
> moment(now).subtract(5, "days").tz("America/Los_Angeles").endOf("day").utc().format('YYYY-MM-DD HH:mm:ss')
'2016-11-05 06:59:59'

moment-timezone@0.5.9 を使った場合

最新バージョン 0.5.9 を利用した場合、2016-11-07 07:59:59 というように 2016-11-07 のその日の終わりの日時を正しく取得することができています。

> var now = new Date("2016-11-09 17:30:00")
> var moment = require("moment-timezone")
 
> moment(now).subtract(1, "days").tz("America/Los_Angeles").endOf("day").utc().format('YYYY-MM-DD HH:mm:ss')
'2016-11-09 07:59:59'
> moment(now).subtract(2, "days").tz("America/Los_Angeles").endOf("day").utc().format('YYYY-MM-DD HH:mm:ss')
'2016-11-08 07:59:59'
> moment(now).subtract(3, "days").tz("America/Los_Angeles").endOf("day").utc().format('YYYY-MM-DD HH:mm:ss')
'2016-11-07 07:59:59'
> moment(now).subtract(4, "days").tz("America/Los_Angeles").endOf("day").utc().format('YYYY-MM-DD HH:mm:ss')
'2016-11-06 06:59:59'
> moment(now).subtract(5, "days").tz("America/Los_Angeles").endOf("day").utc().format('YYYY-MM-DD HH:mm:ss')
'2016-11-05 06:59:59'

moment-timezone は定期的に最新バージョンにアップデートしないと

moment-timezone は IANA Time Zone Database + Moment.js なライブラリなので、IANA Time Zone データベースを最新に更新するためにもバージョンのアップデートは定期的にしないといけませんね。

海外向けサービスを開発しているので、定期的にタイムゾーンに苦しんでいる気がする・・・。

[Heroku] サブディレクトリだけを deploy する

github のリポジトリを節約するために、アプリと API のリポジトリを1つにまとめて管理したいことがあると思います。

$ ls
android
api
ios

git subtree push を利用すると api ディレクトリ以下だけを Heroku に deploy できます。

git subtree push --prefix api/ heroku master

以上です。

参考情報

[Atom] getaddrinfo ENOTFOUND atom.io atom.io:443 エラーの解決方法

apm starred して getaddrinfo ENOTFOUND atom.io atom.io:443 というエラーが表示されたら、apm login して Token を保存すれば解決します。

エラーメッセージ

$ apm starred
getaddrinfo ENOTFOUND atom.io atom.io:443

apm login で解決

$ apm login
Welcome to Atom!
 
Before you can publish packages, you'll need an API token.
 
Visit your account page on Atom.io https://atom.io/account,
copy the token and paste it below when prompted.
 
Press [Enter] to open your account page on Atom.io. 
Token> xxxxx
Saving token to Keychain ✓

エラーメッセージが分かりにくい!

Ionic Framework でアイコンフォント Ionicons を利用する

Ionic Framework からデフォルトで利用できる icon フォント Ionicons の使い方を調べたメモ。

公式サイト http://ionicons.com/ から icon フォントを検索することができます。下記の画像は money というキーワードに近しい icon フォントの検索結果です。

ionicons

利用したい icon フォントが決まったら、肝心の使い方ですが、

<i class="icon ion-cash"></i>

というように icon クラスと ion-cash クラスを付与することで、アイコンを表示できます。

Ionic Framework の公式ドキュメントにもう少しだけ詳しい説明があるので読んでみるといいかもしれません。

いい感じのアイコンがあれば Ionicons をそのまま使うと楽でよさそうですね。

[Atom.io] atom-beauty で JavaScript ソースコードを整形する

JavaScript 使う新規プロジェクトでフォーマッターを使いたいなということで、Atom でソースコードを綺麗に整形してくれる atom-beautify を使ってみました。

atom-beauty のインストール

メニューバーから [Atom] → [Preferences] → [Install] にて、 atom-beautify パッケージを検索してインストールしましょう。

apm で管理しているなら apm install atom-beautify しましょう。

atom-beauty の設定方法

メニューバーから [Atom] → [Preferences] → [Packages] にて、atom-beautify の Settings から設定画面を開けます。

atom-beautify settings

僕の場合、JavaScript の設定は Indent size だけデフォルトの 4 から 2 に変更する以外は特に何もしていません。

atom-beauty の使い方

Atom エディタ上で、右クリックをして Beauty editor contents を押すと JavaScript のソースコードが整形されます。

Control + alt(option) + b のショートカットキーでも整形できます。 Mac も Windows も同じです。

フォーマッターのような便利ツールを導入して開発をどんどん楽にしていきたいですね。