Чтение формата даты в PHP EXCEL


Я прочитал файл excel с помощью PHP excel.

Но этот файл excel содержит некоторую дату (формат времени) PHP excel возвращает неправильные значения для этого случая

Мой код приведен ниже

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..

Мой входной файл Excel находится ниже

2013-12-12, 2013-12-13

Мой вывод приведен ниже

41621, 41631

Есть какой-нибудь способ скрыть вывод формата даты данные?

Author: jahller, 2015-09-17

4 answers

Когда вы читаете файл xls с помощью библиотеки PHPExcel_Reader_Excel5, данные в файле 39984, но Excel форматирует их с помощью маски форматирования даты как "2009-06-20"?

Excel хранит даты как количество дней с 1 января 1900 года (в календаре Windows 1900). PHPExcel сохраняет свои даты таким же образом, но не форматирует их автоматически для вас.

Вы можете отформатировать их самостоятельно, используя 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()));
 17
Author: murrometz, 2017-10-03 07:27:06

Другой способ - использовать 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
 2
Author: Ismael Renteria, 2017-11-03 04:47:36

Если вы используете excel_reader для импорта excel, вы можете использовать такой код.

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

 0
Author: Madhan, 2017-12-27 11:38:48

Чтобы получить дату, вам необходимо преобразовать временную метку Excel в временную метку Linux. Что вам нужно знать, так это:

  • Excel выражает даты в днях , в то время как Linux делает это за секунд.
  • Excel начинает отсчет с 1900 года, в то время как Linux делает это с 1970 года.
  • Все временные метки находятся в GM (тем временем greenwitch), поэтому вы не должны преобразовывать их в 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

Вот и все ребята.

 0
Author: Max Cuttins, 2018-05-02 17:20:50