タイムスタンプをファイル名やら何かのIDやらに使ったりするけど、重複が怖いのでナノ秒まで取ると長すぎて使えないとか、色々有りますよねー。でも、タイムスタンプにしとくと、時系列に並べるのが楽とかあるよねー。
年〜ナノ秒まで並べると、24桁。
これをエポック秒+ナノ秒にすると現在19桁。
[自然数をX進数の文字列に変換するJavaScript](http://recitativo-fant.asia/blog/2013/01/xjavascript.html)
と
[Linuxコマンドからパイプでnode.jsに渡して処理するワンライナー](http://recitativo-fant.asia/blog/2013/02/linuxnodejs.html)
と
dateコマンド(エポック秒+ナノ秒) date +"%s%N" でタイムスタンプ取得、これらを組み合わせて、・・・
とかやってみるけど、JavaScriptの桁数の関係上、現在時刻でマイクロ秒(16桁)くらいまでしか計算できてない(=逆算もできない)ので(逆算しないなら使えなくもないけどw)、「cutコマンドで16桁だけ取り出す」をカマして、下記としてみた。
date +"%s%N" | cut -b 1-16 | node -e "var d2x=function(d){var s='0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';var l=s.length;var x='';while(d>0){x=s.charAt(d%l)+x;d=Math.floor(d/l);}return x;};process.stdin.resume();process.stdin.on('data',function(str){console.log(d2x(str));});"
これで、「1359705351694061」(エポック秒+マイクロ秒の16桁)を「6e6ngkaIt」(9桁)にできた。\(^ω^)ノ ヤッホイ
ちなみに、逆算する場合はこちら。
echo "6e6ngkaIt" | node -e "var x2d=function(x){x=''+x;x=x.trim();var i,j,k=0,s='0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ',l=x.length;for(i=0;i<=l;i++){for(j=0;j<s.length;j++){if(s.charAt(j)==x.charAt(i)){k+=j*Math.pow(s.length,l-i-1);}}}return k;};process.stdin.resume();process.stdin.on('data',function(str){console.log(x2d(str));});"