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