2つの日付間の距離を計算する 改

nanka.hateblo.jp

↑の記事で書いた処理に割と無駄があったので、色々試行錯誤した結果↓のコードになった

こちらのほうがいくらかスマート

var targetDate = Date.parse('2017/04/04 12:34:00');
var timeSpan = Math.floor((Date.parse(targetDate) - Date.now()) / 1000);

var sign = Math.sign(timeSpan);
timeSpan = Math.abs(span);

var second = timeSpan % 60;
timeSpan = (timeSpan - second) / 60;
var minute = timeSpan % 60;
timeSpan = (timeSpan - minute) / 60;
var hour = timeSpan % 24;
timeSpan = (timeSpan - hour) / 24;
var day =  timeSpan;

bashのメモ ( < << <<< <() )

仕事のbashスクリプトを見ていると<<<<()が使われていて、初心者の自分には?だったので、調べた結果をメモしておく 正直な話、完全には理解しきれていない..

< (入力リダイレクト)

<の後にファイルを指定すると、内容がファイルディスクリプタ0(標準入力)にリダイレクトされる ↓の二つはほぼ同義..?

$ cat <data
hoge
fuga
$ cat data | cat
hoge
fuga

<< (ヒアドキュメント)

_EOF_は任意の文字列でよい その間の文字列が標準入力として扱われてコマンドが実行される インデントをするための機能や、エスケープをする機能もあるらしいがその辺は調べていない

$ cat <<_EOF_
> hoge
> huga
> _EOF_
hoge
huga

<<< (ヒアストリング)

ヒアドキュメントと同じような機能 <<< 直後の文字列が標準入力として扱われる

$ cat <<<hogefuga
hogefuga

ヒアドキュメントと同じように複数行も動いた

$ cat <<<'
> hoge
> fuga
> '

hoge
fuga

ヒアストリングとドキュメントはどのように使い分ければよいのだろうか..?

<(…) (プロセス置換)

コマンドの出力結果を一時ファイルのように扱ってくれる機能 本来ならファイル名でしか指定できないdiffコマンドもご覧の通り

$ diff -u <(echo 'hoge') <(echo 'fuga')
--- /dev/fd/63  2017-04-01 21:28:41.000000000 +0900
+++ /dev/fd/62  2017-04-01 21:28:41.000000000 +0900
@@ -1 +1 @@
-hoge
+fuga

これは仕事のスクリプトでもよく使われていて便利そうだった