我想将excel中的TIMESTAMP格式值插入数据库。价值有点像“1/6/2016 12:00:00 AM”。我使用此代码将值插入数据库
$TimeStamp = mysqli_real_escape_string($conn,trim($objPHPExcel->getActiveSheet()->getCell('A' . $row)->getValue()));
但价值结果如此“42522”。似乎该值传输不正确。似乎代码有问题,并且不适合使用插入TimeStamp格式值。我可以知道如何纠正这个问题吗?
谢谢。
答案 0 :(得分:0)
Excel将日期内部存储为自1900年1月1日以来的天数。 例如:“2011年6月9日上午10:30”将存储为“40703.4375”。 40703是自01/01/1900以来的完整天数,0.4375表示时间(10.5 / 24 = 0.4375)。
当您处理从Excel电子表格中读取的日期时(例如,使用PHPExcel),您经常希望将它们转换为UNIX时间戳,即自UTC时间1970年1月1日午夜起经过的秒数。
这是一个PHP代码:
// Numbers of days between January 1, 1900 and 1970 (including 19 leap years)
define("MIN_DATES_DIFF", 25569);
// Numbers of second in a day:
define("SEC_IN_DAY", 86400);
function excel2timestamp($excelDate)
{
if ($excelDate <= MIN_DATES_DIFF)
return 0;
return ($excelDate - MIN_DATES_DIFF) * SEC_IN_DAY;
}
如果您提供稍后在应用中阅读的Excel电子表格,则可以在电子表格中添加一个隐藏的单元格,用于计算您的时间戳。 假设B2是存储日期的单元格,则计算时间戳的公式为:
代码: =(B2-DATE(1970,1,1))* 86400 现在,您只需要从隐藏单元格中读取计算值。
答案 1 :(得分:0)
Excel正在为您提供正确的信息,您也正在正确地执行此操作。为了澄清,Excel以整数格式存储时间戳值。所以,在这里你获得了价值&#34; 42552&#34;这显然是对的,现在你必须使用这个功能来实现你正在做的事情
<?php
function ExcelToTimeStamp($dateValue = 0, $ExcelBaseDate=0) {
if ($ExcelBaseDate == 0) {
$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;
}
$myTimestamp = // Output will be 146473920001 and it is a timestamp in php you can store it
echo date('d M Y', $myTimestamp); now convert that timestamp value in any format you want usnig date()
?>