ATOM Editor で現在日時を挿入する
上の記事で, date パッケージなるものがあるというので早速試してみるが,フォーマットの指定の仕方が分からない。
この記事を見ると,変な場所を触らないといけないらしい。
よろしい,ならば戦争だ自作しよう。
「Atomに現在日時を挿入するコマンドを追加する」を参考に(というかほとんどコピペでw), Init Script (init.coffee
) に以下の記述を追加した。
# 現在日時を挿入するコマンドを追加
# refs https://github.com/dannyfritz/atom-date
# refs https://github.com/JerrySievert/date-utils
# refs http://qiita.com/toruot/items/b26fde1a898bb52985e1
daysAbbr = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat']
#daysKanji = ['日', '月', '火', '水', '木', '金', '土']
paddingZero = (str, length) ->
str = String(str)
str = '0' + str while(str.length < length)
str
timezone = (offset) ->
if offset == 0
'Z'
else if offset < 0
'+' + paddingZero(-offset / 60, 2) + ':00' # 今のところ分単位の時差はないので計算を端折る
else
'-' + paddingZero(offset / 60, 2) + ':00' # 今のところ分単位の時差はないので計算を端折る
dateOrTime = (kind) ->
now = new Date()
yyyy = now.getYear() + 1900
mm = paddingZero(now.getMonth() + 1, 2)
dd = paddingZero(now.getDate(), 2)
ddd = daysAbbr[now.getDay()]
#ddd = daysKanji[now.getDay()]
hh24 = paddingZero(now.getHours(), 2)
mi = paddingZero(now.getMinutes(), 2)
ss = paddingZero(now.getSeconds(), 2)
tz = timezone(now.getTimezoneOffset())
if kind == 1
"#{yyyy}/#{mm}/#{dd} (#{ddd})"
else if kind == 2
"#{hh24}:#{mi}:#{ss}"
else if kind == 3
"#{yyyy}/#{mm}/#{dd} (#{ddd}) #{hh24}:#{mi}:#{ss}"
else
"#{yyyy}-#{mm}-#{dd}T#{hh24}:#{mi}:#{ss}#{tz}"
insertText = (str) ->
return unless editor = atom.workspace.getActiveTextEditor()
selection = editor.getLastSelection()
selection.insertText(str)
atom.commands.add 'atom-text-editor', 'my-date:date', ->
insertText(dateOrTime(1))
atom.commands.add 'atom-text-editor', 'my-date:time', ->
insertText(dateOrTime(2))
atom.commands.add 'atom-text-editor', 'my-date:datetime', ->
insertText(dateOrTime(3))
atom.commands.add 'atom-text-editor', 'my-date:rfc3339', ->
insertText(dateOrTime(0))
元のコードでは timezone の項目がなかったので追加し,更に RFC 3339 のフォーマットを追加した。
そういや JavaScript の Date.getTimezoneOffset()
って ± が逆になるんだっけ。
忘れてた orz
なるほど。 自分で(パッケージにするまでもない)簡単なコマンドを作る場合はこうすればいいんだな。 勉強になりました(谷啓風)。 しかし CoffeeScript は慣れん。 Arrow functions は確かに便利だけど(ES6 に採用されるくらいだし)。