我正在使用ubuntu进行编码。
我正在将xls文件数据导入我的控制器,其中一个字段是日期,我用日期格式格式化了单元格,当我查看导入的数据时,一切都很好,但是日期字段显示为号,
例如:输入的日期为2013-05-10
,显示为39942
然后检查后我通过保持日期值将单元格的格式更改为数字,然后它显示了一个值39942
,它与我进入我的值相同控制器..!
如何在导入后获得正确的日期
对此有任何帮助..?
答案 0 :(得分:0)
Excel将日期/时间存储为序列化浮点时间戳,自1900年1月1日(或1904年1月1日,取决于Windows或Mac日历)以来的天数,并记住它将1900视为闰年。
直接从PHPExcel日期处理代码中获取:
public static function ExcelToPHP($dateValue = 0) {
if (self::$ExcelBaseDate == self::CALENDAR_WINDOWS_1900) {
$myExcelBaseDate = 25569;
// Adjust for the spurious 29-Feb-1900 (Day 60)
if ($dateValue < 60) {
--$myExcelBaseDate;
}
} else {
$myExcelBaseDate = 24107;
}
// Perform conversion
if ($dateValue >= 1) {
$utcDays = $dateValue - $myExcelBaseDate;
$returnValue = round($utcDays * 86400);
if (($returnValue <= PHP_INT_MAX) && ($returnValue >= -PHP_INT_MAX)) {
$returnValue = (integer) $returnValue;
}
} else {
$hours = round($dateValue * 24);
$mins = round($dateValue * 1440) - round($hours * 60);
$secs = round($dateValue * 86400) - round($hours * 3600) - round($mins * 60);
$returnValue = (integer) gmmktime($hours, $mins, $secs);
}
// Return
return $returnValue;
} // function ExcelToPHP()
根据需要设置self :: $ ExcelBaseDate == self :: CALENDAR_WINDOWS_1900以指示您正在使用的Excel基本日历:Windows 1900或Mac 1904
如果你想要一个PHP DateTime对象:
public static function ExcelToPHPObject($dateValue = 0) {
$dateTime = self::ExcelToPHP($dateValue);
$days = floor($dateTime / 86400);
$time = round((($dateTime / 86400) - $days) * 86400);
$hours = round($time / 3600);
$minutes = round($time / 60) - ($hours * 60);
$seconds = round($time) - ($hours * 3600) - ($minutes * 60);
$dateObj = date_create('1-Jan-1970+'.$days.' days');
$dateObj->setTime($hours,$minutes,$seconds);
return $dateObj;
} // function ExcelToPHPObject()