如何将Excel中的TIMESTAMP格式值插入数据库

时间:2017-04-20 18:58:53

标签: php mysql excel timestamp

我想将excel中的TIMESTAMP格式值插入数据库。价值有点像“1/6/2016 12:00:00 AM”。我使用此代码将值插入数据库

$TimeStamp = mysqli_real_escape_string($conn,trim($objPHPExcel->getActiveSheet()->getCell('A' . $row)->getValue()));

但价值结果如此“42522”。似乎该值传输不正确。似乎代码有问题,并且不适合使用插入TimeStamp格式值。我可以知道如何纠正这个问题吗?

谢谢。

2 个答案:

答案 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()
?>