5
我使用PHPExcel生成一個xls模板,用戶可以下載並用他想要的數據填充它。如我們所知,excel以數字格式保存日期。我使用這個功能,將數據轉換並返回時間戳:有沒有辦法檢測使用PHPExcel在windows或mac上是否生成了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的Mac或Windows填補,所以我可以正確設置日期(mac使用1904日曆,而windows使用1900)。
我想知道是否有方法使用PHPExcel進行檢測。如果不是這樣,我可以讓用戶用一個單選按鈕通知,也許...
出於興趣(在我回答之前),有什麼特別的原因可以說明,如果您已經在PHPExcel中創建了自己的日期轉換函數,那麼您爲什麼要編寫自己的日期轉換函數呢? –
這是因爲我在文檔中將readonlydata設置爲true ......這就是說:「重要的是要注意Workbooks(和PHPExcel)將日期和時間存儲爲簡單的數值:它們只能通過以下方式與其他數值區分:應用於該單元格的格式掩碼當僅將讀取數據設置爲true時,PHPExcel不會讀取單元格格式掩碼,因此無法區分日期/時間和數字。它只支持gnumeric,對吧? – Periback
其實..這對我來說不是強制性的(readonlydata)......可以用更簡單的方法來完成嗎? – Periback