转换Excel's”;41014”;日期到PHP或JavaScript中的实际日期
Convert Excel's "41014" date to actual date in PHP or JavaScript
我正在用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
}
直接取自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()
如果你更喜欢JavaScript,我在GitHub上找到了以下公式:
new Date((excelDate - (25567 + 2))*86400*1000)
适用于您指定的日期。也许你可以试试它是否为其他值返回了正确的日期。
根据@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
我认为这5位数字是朱利安格式的日期,这一定是表示日期和时间的通用数字方式,
例如,7月号CCD_ 7=>1999-05-29
(通用数据库日期格式(
编号CCD_ 9=>2021-01-29 09:40:51
(对于日期时间,分数表示时间(
要进行此转换,请在此处使用php语言,但可以使用类似的内置函数将其更改为任何首选语言
function correctDateTime($dateTime)
{
# integer digits for Julian date
$julDate = floor($dateTime);
# The fractional digits for Julian Time
$julTime = $dateTime - $julDate;
# Converts to Timestamp
$timeStamp = ($julDate > 0) ? ($julDate - 25569) * 86400 + $julTime * 86400 : $julTime * 86400;
# php date function to convert local time
return [
"Date-Time"=>date("Y-m-d H:i:s", $timeStamp),
"Date"=>date("Y-m-d", $timeStamp),
"Time"=>date("H:i:s", $timeStamp)
];
}
$formattedValue = correctDateTime("44225.403368056");
echo $formattedValue["Date-Time"] . "'n"; // 2021-01-29 09:40:51
echo $formattedValue["Date"] . "'n"; // 2021-01-29
echo $formattedValue["Time"] . "'n"; // 09:40:51
- 将日期和时间转换为UTC格式的日期-Javascript
- 将 DD/MMM/YYYY 转换为二进制/纪元日期 JavaScript
- 生成时间戳日期|Javascript范围内的空数据
- 算法导航:如何查找最近的日期(javascript)
- 按日期javascript对JSON数据进行排序
- 可以使用日期 JavaScript 字符串
- 倒计时日期 - Javascript
- 将日期添加到日期以使明天成为当前日期 - Javascript
- 交货日期 Javascript 适应排除周末
- 在文本框中显示当前日期 - JavaScript
- 将json结果转换为正确的日期javascript
- 选择日期-javascript
- 修改时区新日期javascript
- 获取上月日期javascript
- 日期.javascript日期格式
- PHP生成日期->Javascript倒计时
- 如何根据给定的日期JavaScript计算3个月的日期
- 排序数组的日期- javascript
- 为什么日期.UTC(2015, 08, 31) ==日期.javascript中的UTC(2015,09, 01)
- 根据它创建的时区显示日期- JavaScript