シリアル値
エクセルで経過日数を求めるには日付同士を単純に引き算すれば求められます。
エクセルではシリアル値という値を使って日付を管理しているからです。シリアル値は1900年1月1日を「1」、2日を「2」として延々と日数を数えた値です。
例えば、2001年2月18日から2004年1月1日までの経過日数を求めてみます。
2001年2月18日のシリアル値は「36940」で
2004年1月1日のシリアル値は「37987」ですので、引き算して
37987-36940=1047(日)となります。 続きを読む…
経過月日の計算の方法は「3月10日から6月20日」のように日数の部分が単純に差で求められる場合は簡単である。
一方、「3月20日から6月10日」のように日数の部分が負になる場合が面倒である。
この場合の計算方法は、いくつか考えられるが一般的なのは次の二つだろう。 続きを読む…
ExcelのDATEDIF関数は今一つ挙動不審なので使わないようにしていたのですが、具体的なバグについて今頃、知りました。
使っていないから自分で気付くはずがないのですが。
このバグは有名なのだそうですが、修正されていません。
マイクロソフトはこれをExcelの正式なワークシート関数として取り扱っていないからでしょう。
確かにExcel2007のヘルプを見てもDATEDIFは見付かりません。 続きを読む…
PHPのstrtotimeは例えば「10 September 2000」という日付を表す文字列をタイムスタンプに変換してくれます。
PHP: strtotime – Manual
しかしこのような英文形式の日付は日本人には馴染みません。
またMySQLの日付形式とも違います。
MySQLの日付形式は「2000-09-10」という日本人に馴染みやすい表記です。
実は、PHPのマニュアルには書かれていませんが、「2000-09-10」という形式であってもstrtotimeは正しくタイムスタンプに変換します。
これはとても便利。
Twitterの日付形式をExcelのシリアル値に変換する、VBAのコードです。
Function twitter_dateserial(td)
'Twitterの日付形式をExcelのシリアル値に変換する。
'変換前「Tue Jul 21 03:23:04 +0000 2009」
ds = Split(td, " ")hs = Split(ds(3), ":")
mstr = (InStr("JanFebMarAprMayJunJulAugSepOctNovDec", ds(1)) + 2) / 3
twitter_dateserial = DateSerial(ds(5), mstr, ds(2)) + TimeSerial(hs(0) + 9, hs(1), hs(2))
End Function
Twitterの投稿データをJSONなどで取得すると、日付は「Tue Dec 16 23:48:56 +0000 2008」のようになります。
英語表記なので分かりにくい上、そもそもイギリス時間。
これを「2008年12月17日 8:48:56」のような日本語表記に直すJavaScriptの例です。
function twitterdate(td){
//変換前「Tue Dec 16 23:48:56 +0000 2008」
//変換後「2008年12月17日 8:48:56」
re=/^(.+) (.+) (..) (..):(..):(..) (.+) (.+)$/;
pat="$2 $3, $8 $4:$5:$6 UTC+0000";
rep=new Date(td.replace(re,pat));
return(rep.toLocaleString());
}
もっとシンプルにできないものかなあ。
最近のコメント