read php import-from-excel

read - Conversión de fecha de Excel usando PHP Excel



phpexcel date format (5)

Estoy leyendo la fecha de Excel que está en este formato 12/5/2012 día / mes / año usando este código para leer. usando PHP EXCEL

PHPExcel_Style_NumberFormat::toFormattedString($value[''A''],''YYYY-MM-DD'' );

está funcionando como un encanto convirtiendo la fecha anterior ''12 / 5/2012 ''en'' 2012-12-05 ''

Ahora el problema es que si la fecha es "deja" dice 18/5/2012 o puedes decir que si programé un día mayor a 12 me da esta fecha 18/5/2012 en este formato 18/5/2012 después del formateo

Intenté esto también

$temp = strtotime( PHPExcel_Style_NumberFormat::toFormattedString($value[''A''],''YYYY-MM-DD'' ); $actualdate = date(''Y-m-d'',$temp) ;

Esto también es convertir la fecha ''12 / 5/2012 ''correcta, pero en este caso el 18/5/2012 da un resultado como 1970-01-01


Al usar PHPExcel puede usar la función incorporada:

$excelDate = $cell->getValue(); // gives you a number like 44444, which is days since 1900 $stringDate = /PHPExcel_Style_NumberFormat::toFormattedString($excelDate, ''YYYY-MM-DD'');


Parece que su variable es una cadena, o está esperando una fecha en formato de EE.UU.
use ''DateTime :: createFromFormat'' para convertir la fecha en un formato de fecha real

$date = DateTime::createFromFormat(''d/m/y'', $value[''A'']); echo $date->format(''Y-m-d'');


Si estás usando python, resolví este problema agregando la clase xldate de xlrd lib, aquí te muestro el código (esto está en el módulo Odoo 10):

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) devolverá el objeto datetime con los valores correctos


Una manera fácil ...

<?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'');


Utilice esta fórmula para cambiar de la fecha de Excel a la fecha de Unix, luego puede usar "gmdate" para obtener la fecha real en PHP:

UNIX_DATE = (EXCEL_DATE - 25569) * 86400

y para convertir la fecha de Unix a la fecha de Excel, use esta fórmula:

EXCEL_DATE = 25569 + (UNIX_DATE / 86400)

Después de poner esta fórmula en una variable, puede obtener la fecha real en PHP usando este ejemplo:

$UNIX_DATE = ($EXCEL_DATE - 25569) * 86400; echo gmdate("d-m-Y H:i:s", $UNIX_DATE);