Bri*_*ell 5 javascript php mysql excel jquery
我正在用 PHP/Jquery 编写一些东西,允许用户从 Excel 上传 Excel 电子表格。然后它获取该电子表格中的数据并将每个单元格中的值分配给一个变量,但由于某种原因,我在日期方面遇到了困难。Excel 中的任何日期都以数字形式出现,例如41014, 而不是04/15/2012(就好像我在 Excel 中将格式设置为text)。
如何将其转换为 YYYY-MM-DD 格式,以便它适合我正在使用的 mySQL 数据库的其余部分?我可以用 PHP 或 Jquery 来完成,但用 jQuery 来完成对我来说似乎更容易。
Excel 的单元格
04/15/2012
Run Code Online (Sandbox Code Playgroud)
PHP 的echo json_encode($var);
`{dateReceived: 41014}`
Run Code Online (Sandbox Code Playgroud)
jQuery 的console.log(dateReceived);
41014
Run Code Online (Sandbox Code Playgroud)
我实际上无法得到这里提供的任何一个答案来工作 - 我认为 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
}
Run Code Online (Sandbox Code Playgroud)
直接取自 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()
Run Code Online (Sandbox Code Playgroud)
根据需要设置 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()
Run Code Online (Sandbox Code Playgroud)