私はPHPExcelを使用して、ユーザーがダウンロードして必要なデータを入力できるxlsテンプレートを生成しています。ご存知のように、Excelは日付を数値形式で保存します。この関数を使用してデータを変換し、タイムスタンプを返します。
public static function excelToTimestamp($excelDateTime, $isMacExcel=false) {
$myExcelBaseDate = $isMacExcel ? 24107 : 25569; // 1st jan 1904 or 1st jan 1900
if (!$isMacExcel && $excelDateTime < 60) {
// Adjust for the spurious 29-Feb-1900 (Day 60)
--$myExcelBaseDate;
}
// Perform conversion
if ($excelDateTime >= 1) {
$timestampDays = $excelDateTime - $myExcelBaseDate;
$timestamp = round($timestampDays * 86400);
if (($timestamp <= PHP_INT_MAX) && ($timestamp >= -PHP_INT_MAX)) {
$timestamp = intval($timestamp);
}
} else {
$hours = round($excelDateTime * 24);
$mins = round($excelDateTime * 1440) - round($hours * 60);
$secs = round($excelDateTime * 86400) - round($hours * 3600) - round($mins * 60);
$timestamp = (integer) gmmktime($hours, $mins, $secs);
}
return $timestamp;
}
問題は、ユーザーがシステムにインポートしたファイルがExcel for MacまたはWindowsを使用していっぱいになっているかどうかを検出する必要があることです。これにより、日付を正しく設定できます(Macは1904カレンダーを使用し、Windowsは1900を使用します)。
PHPExcelを使用してそれを検出する方法があるかどうか知りたいのですが。そうでない場合は、ユーザーにラジオボタンで通知させることができます。