Excel date conversion using PHP Excel

后端 未结 5 960
予麋鹿
予麋鹿 2020-11-30 03:53

i am reading date from excel which is in this format 12/5/2012 day/month/year using this code to read . using PHP EXCEL

   PHPExcel_Style_NumberFormat::t         


        
相关标签:
5条回答
  • 2020-11-30 04:37

    It appears your variable is a string, or is expecting a US format date.
    use 'DateTime::createFromFormat' to cast the date into an actual date format

    $date = DateTime::createFromFormat('d/m/y', $value['A']);
    echo $date->format('Y-m-d');
    
    0 讨论(0)
  • 2020-11-30 04:42

    An easy way...

    <?php
        $date = date_create('30-12-1899');
    
        date_add($date, date_interval_create_from_date_string("{$value['A']} days"));
        echo date_format($date, 'Y-m-d');
    
    0 讨论(0)
  • 2020-11-30 04:44

    When using PHPExcel you can use the built in function:

    $excelDate = $cell->getValue(); // gives you a number like 44444, which is days since 1900
    $stringDate = \PHPExcel_Style_NumberFormat::toFormattedString($excelDate, 'YYYY-MM-DD');
    
    0 讨论(0)
  • 2020-11-30 04:57

    Please use this formula to change from Excel date to Unix date, then you can use "gmdate" to get the real date in PHP:

    UNIX_DATE = (EXCEL_DATE - 25569) * 86400
    

    and to convert from Unix date to Excel date, use this formula:

    EXCEL_DATE = 25569 + (UNIX_DATE / 86400)
    

    After putting this formula into a variable, you can get the real date in PHP using this example:

    $UNIX_DATE = ($EXCEL_DATE - 25569) * 86400;
    echo gmdate("d-m-Y H:i:s", $UNIX_DATE);
    
    0 讨论(0)
  • 2020-11-30 04:58

    If you're using python I resolved this issue by add xldate class from xlrd lib, here I show you the code (This is in Odoo 10 module):

    from xlrd import open_workbook, xldate
    wb = open_workbook(file_contents=excel_file)
    data_sheets = []
    
            # Parse all data from Excel file
            for s in wb.sheets():
                data_rows = []
                headers = []
                for row_key, row in enumerate(range(s.nrows)):
                    if row_key != 0:
                        data_row = {}
                        for index, col in enumerate(range(s.ncols)):
                            value = s.cell(row, col).value
                            key = headers[int(index)]
                            if key == 'Date' and (isinstance(value, float) or isinstance(value, int)):
                                value = xldate.xldate_as_datetime(value, wb.datemode)
                                data_row[key] = value
                            else:
                                data_row[key] = value
    
                        data_rows.append(data_row)
                    else:
                        for index, col in enumerate(range(s.ncols)):
                            value = (s.cell(row, col).value)
                            headers.append(value)
                data_sheets.append(data_rows)
    

    value = xldate.xldate_as_datetime(value, wb.datemode) will return datetime object with correct values

    0 讨论(0)
提交回复
热议问题