我在PHP / Jquery中编写了一些内容,允许用户从Excel上传Excel电子表格。然后它获取该电子表格中的数据并将每个单元格的值分配给变量,但出于某种原因,我很难处理日期。 Excel中的任何日期都以数字形式出现,例如41014
,而不是04/15/2012
(就像我在Excel中将格式设置为text
)。
如何将其转换为YYYY-MM-DD格式,以便它适合我正在使用的mySQL数据库的其余部分?我可以在PHP或Jquery中做到这一点,但在jQuery中这样做对我来说似乎更容易。
Excel的细胞
04/15/2012
PHP echo json_encode($var);
`{dateReceived: 41014}`
jQuery' console.log(dateReceived);
41014
我实际上无法获得这里提供的任何一个答案 - 我认为php答案最初有效,但出于某种原因我无法将其输出到我需要的内容,但我找到了另一个我把一个简单的公式放入一个函数中。如果其他人正在寻找类似问题的答案,请按以下步骤操作:,(其中$ dateValue是Excel日期41014
等等)
function convertDate($dateValue) {
$unixDate = ($dateValue - 25569) * 86400;
return gmdate("Y-m-d", $unixDate);
'where Y is YYYY, m is MM, and d is DD
}
答案 0 :(得分:3)
直接从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 ...很可能是1900
如果你想要一个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()
答案 1 :(得分:1)
如果您更喜欢JavaScript,我在GitHub上找到了以下公式:
new Date((excelDate - (25567 + 2))*86400*1000)
适用于您指定的日期。也许您可以尝试一下它是否返回其他值的正确日期。
答案 2 :(得分:0)
使用@QueryLars的建议,这是PHP中最简单的工作解决方案:
$excelDate = 43407; //2018-11-03
$miliseconds = ($excelDate - (25567 + 2)) * 86400 * 1000;
$seconds = $miliseconds / 1000;
echo date("Y-m-d", $seconds); //2018-11-03