[英]Excel date conversion using PHP Excel
我正在閱讀 excel 中的日期,格式為 12/5/2012 日/月/年,使用此代碼閱讀。 使用 PHP EXCEL
PHPExcel_Style_NumberFormat::toFormattedString($value['A'],'YYYY-MM-DD' );
它的工作就像將上述日期“12/5/2012”轉換為“2012-12-05”的魅力
現在的問題是,如果日期是 2012 年 5 月 18 日,或者你可以說如果我將日期設置為大於 12,它會在格式化后以這種格式 18/5/2012 給我這個日期 18/5/2012
我也試過這個東西
$temp = strtotime( PHPExcel_Style_NumberFormat::toFormattedString($value['A'],'YYYY-MM-DD' );
$actualdate = date('Y-m-d',$temp) ;
這也將日期“12/5/2012”轉換為正確但在這種情況下 18/5/2012 它給出 output 作為 1970-01-01
請使用此公式從Excel日期更改為Unix日期,然后您可以使用“gmdate”來獲取PHP中的實際日期:
UNIX_DATE = (EXCEL_DATE - 25569) * 86400
要從Unix日期轉換為Excel日期,請使用以下公式:
EXCEL_DATE = 25569 + (UNIX_DATE / 86400)
將此公式放入變量后,您可以使用此示例在PHP中獲取實際日期:
$UNIX_DATE = ($EXCEL_DATE - 25569) * 86400;
echo gmdate("d-m-Y H:i:s", $UNIX_DATE);
使用PHPExcel時,您可以使用內置函數:
$excelDate = $cell->getValue(); // gives you a number like 44444, which is days since 1900
$stringDate = \PHPExcel_Style_NumberFormat::toFormattedString($excelDate, 'YYYY-MM-DD');
一個簡單的方法......
<?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');
您的變量似乎是一個字符串,或者期望美國格式日期。
使用'DateTime :: createFromFormat'將日期轉換為實際的日期格式
$date = DateTime::createFromFormat('d/m/y', $value['A']);
echo $date->format('Y-m-d');
考慮到1664193600000
= 26.09.2022 12:00:00
從 Excel 到 Unix 的答案是:
UNIX_DATE = (EXCEL_DATE - 25569) * 86400000
從 UNIX 到 Excel
EXCEL_DATE = 25569 + (UNIX_DATE / 86400000)
PHP 中的 UNIX_DATE 以毫秒為單位給出。
86400000ms
對應於24 h/d
* 3600 s/h
* 1000 ms/s
。
25569
是從Jan 1, 1900
到Jan 1, 1970
的天數。
如果您正在使用python我通過從xlrd lib添加xldate類來解決此問題,在這里我向您展示代碼(這是在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)將返回具有正確值的datetime對象
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.