Excelのシリアル値とUnix Time の基準値

(☆) http://d.hatena.ne.jp/KuroNeko666/20070821/1187689020
http://www5d.biglobe.ne.jp/~noocyte/Programming/GregorianAndJulianCalendars.html
http://blog.mode-a.com/2008/11/28/excel_date-unix_time/

いろいろにらんで見ると、

  • シリアル値の基準は1900年1月1日(0:0:0)が、シリアル値=1.0日
  • Unix Timeの基準は1970年1月1日(0:0:0)GMTUTC)が、Unix Time=0秒

ということのようだ。これだけきちんと定義されてれば、計算は可能。
但し、研究とか現実とかはまた別の話。

基準が0か1かということに惑わされた。
スケジュールを扱う上では、シリアル値の方が日単位なので便利かな。


‥ということで、遅い方の基準日時『1970年1月1日』について両方の時間で表現しておこう。そうすれば実用的に換算できる。
より実践的に、JSTの値を見ておく。

  • 1970年1月1日00:00:00(JST)のUnix Time (PHP strtotime()出力)は、-32400秒(≡-9×3600)
  • 1970年1月1日00:00:00のシリアル値(エクセルの標準表示)は、25569日

これより、

$dateSerial = (int)((strtotime($dateTextInput) + 9*3600)/(24*3600)) + 25569;

前出(☆)以外に参考にしたもの
http://phpnokowaza.seesaa.net/article/9787777.html
http://www.24w.jp/study_contents.php?bid=php&iid=php&sid=date&cid=002