programing

PHP EXCEL에서 날짜 형식 읽기

yellowcard 2023. 6. 9. 21:57
반응형

PHP EXCEL에서 날짜 형식 읽기

저는 PHP 엑셀을 사용하여 엑셀 파일을 읽었습니다.

하지만 그 엑셀 파일에 일부 날짜(시간 형식)가 포함되어 있습니다. PHP 엑셀은 그 경우에 잘못된 값을 반환합니다.

내 코드는 아래에 있습니다.

enter code hereinclude 'Classes/PHPExcel/IOFactory.php';

$inputFileName = 'index.xlsx';

//  Read your Excel workbook
try {
    $inputFileType = PHPExcel_IOFactory::identify($inputFileName);
    $objReader = PHPExcel_IOFactory::createReader($inputFileType);
    $objPHPExcel = $objReader->load($inputFileName);
} catch (Exception $e) {
    die('Error loading file "' . pathinfo($inputFileName, PATHINFO_BASENAME)
        . '": ' . $e->getMessage());
}

//  Get worksheet dimensions
$sheet = $objPHPExcel->getSheet(0);
$highestRow = $sheet->getHighestRow();
$highestColumn = $sheet->getHighestColumn();

//  Loop through each row of the worksheet in turn
for ($row = 1; $row <= $highestRow; $row++) {
    //  Read a row of data into an array
    $rowData = $sheet->rangeToArray('A' . $row . ':' . $highestColumn . $row,
        NULL, TRUE, FALSE);

    foreach ($rowData[0] as $k => $v)
        echo "Row: " . $row . "- Col: " . ($k + 1) . " = " . $v . "<br />";
}

누구나 이것을 위해 도울 수 있습니다.PHPExcel에서 이 사례에 대한 특정 기능을 가지고 있습니다.

제 입력 엑셀 파일은 아래에 있습니다.

2013-12-12, 2013-12-13

내 출력은 아래에 있습니다.

41621, 41631

날짜 형식 출력 데이터를 숨기는 방법이 있습니까?

PHPExcel_Reader_로 xls 파일을 읽는 경우Excel5 lib, 파일의 데이터는 39984인데 Excel은 날짜 형식 마스크를 사용하여 '2009-06-20'으로 형식을 지정합니까?

Excel은 1900년 1월 1일 이후(Windows 1900 달력의 경우) 날짜를 계산합니다.PHP Excel은 동일한 방식으로 날짜를 저장하지만 자동으로 형식을 지정하지는 않습니다.

다음을 사용하여 직접 포맷할 수 있습니다.PHPExcel_Style_NumberFormat::toFormattedString(39984,PHPExcel_Style_NumberFormat::FORMAT_DATE_DDMMYYYY)
또는 의 다른 형식 마스크
PHPExcel_Style_NumberFormat
또는 다음을 사용하여 PHP 날짜로 변환합니다.
PHPExcel_Shared_Date::ExcelToPHP(39984)그런 다음 PHP를 사용합니다.date()
원하는 대로 포맷할 수 있는 기능

예:

$val = date('Y-m-d', PHPExcel_Shared_Date::ExcelToPHP($cell->getValue()));

다른 방법은 gmdate를 사용하는 것입니다.

$excel_date = 43010; //here is that value 41621 or 41631
$unix_date = ($excel_date - 25569) * 86400;
$excel_date = 25569 + ($unix_date / 86400);
$unix_date = ($excel_date - 25569) * 86400;
echo gmdate("Y-m-d", $unix_date);

//result is 2017-10-02

Excel Timestamp에서 Linux Timestamp로 변환해야 하는 날짜를 검색합니다.알아야 할 것은 다음과 같습니다.

  • Excel express 날짜는 일 단위이고 Linux 날짜는 초 단위입니다.
  • Excel은 1900년부터 계산하기 시작한 반면 Linux는 1970년부터 계산합니다.
  • 모든 타임스탬프는 GM(녹색 스위치)으로 표시되므로 다음과 같이 변환하면 안 됩니다.gmdate();하지만 대신 그냥 사용합니다.date();

따라서 Excel에서 Linux로 변환하려면 다음 작업을 수행해야 합니다.

  • 70년의 기간을 제거:25569
  • 하루에 몇 초 동안 곱셈:86400

코드는 다음과 같습니다.

function fromExcelToLinux($excel_time) {
    return ($excel_time-25569)*86400;
}

$linux_time = fromExcelToLinux(30637); 
echo date("Y-m-d",$linux_time);
//should print 1983-11-17

그게 사람들 전부야.

엑셀 가져오기를 위해 excel_reader를 사용하는 경우에는 다음과 같은 Code를 사용할 수 있습니다.

include('excel_reader/xlsxreader/simplexlsx.class.php');
$xlsx_class = new SimpleXLSX();
$j['IST_Time'] = '43010';
echo date('Y-m-d',$xlsx_class->unixstamp($j['IST_Time'])); // Result will be 2017-10-02

그리고 시간을 위하여

$j['IST_Time'] = '0.416666666667'; 
echo date('h:i A',$xlsx_class->unixstamp($j['IST_Time'])); //10:00 AM

또는 simplexlsx.class를 봅니다.php

언급URL : https://stackoverflow.com/questions/32624838/read-date-format-in-php-excel

반응형