【问题标题】:Issue reading dates with "spreadsheet-reader" in php在 php 中使用“电子表格阅读器”发出阅读日期
【发布时间】:2016-06-07 08:50:42
【问题描述】:

我正在使用 spreadsheet-reader 读取一些 .xls.xlsx 并将它们转换为 .csv

这是我的简化代码:

require_once(dirname(__FILE__) . '/../ext/spreadsheet-reader/SpreadsheetReader.php');
require_once(dirname(__FILE__) . '/../ext/spreadsheet-reader/php-excel-reader/excel_reader2.php');

$pCsvPath =  Config::$generatedCSVPath . "/" . str_replace(array(".xlsx", ".xls"), ".csv", $pFileName);

$csv = fopen($pCsvPath, "w");

$pReader = new SpreadsheetReader($pFilePath);

// Read only the first sheet
$pSheets = $pReader -> Sheets();
$pReader -> ChangeSheet(0);

foreach ($pReader as $row)
{
    fputcsv($csv, $row);
}

一切正常,但我遇到了日期问题。

.xls/.xlsx 文件中有一个列,格式如下:2015-02-10 当我将它们写入.csv 时,此列的输出为2015201520152015-FebFeb-TueTue

如何使用我在上面发布的代码将其转换为.csv,但将日期保持为正确的格式 (2015-02-10)?

提前致谢。

编辑:如果我手动将日期从 2015-01-01 更改为 01-01-2015(将年份放在末尾),日期将被正确解析。如果无法将日期保存为2015-01-01,我如何使用我上面发布的代码将该行更改为正确的格式(最后一年)?

我知道我可以手动解析日期,但不能使用上面的代码,因为当我调用 $pReader = new SpreadsheetReader($pFilePath) 函数时会加载所有内容,并且无法操作日期。 p>

【问题讨论】:

  • 嗨,Avion 你有解决办法吗?
  • 不,@Kuttoozz,对不起:(

标签: php excel csv


【解决方案1】:

使用date , strtotime

date( "d-m-Y", strtotime( "2015-02-10" ) )

会将您的日期格式转换为10-02-2015

foreach ($pReader as $row)
{

// assuming date is stored on 3rd place , $row[2]

$str = $row[0] ."+_+". $row[1]."+_+".date( "d-m-Y", strtotime( $row[2] ) );


           fputcsv($csv,explode("+_+",$str));
}

【讨论】:

  • 请阅读问题。我知道我可以使用该方法解析日期,但是我无法在代码中操纵日期。当你 $pReader = new SpreadsheetReader($pFilePath) 时加载整个 .xls.xlsx
  • @Borja 你必须打开你的行数组,合并数组的所有元素并更改日期数组元素
  • 行数组已经包含错误的日期(2015201520152015-FebFeb-TueTue),所以我无法在那里解析它。我必须在$pReader = new SpreadsheetReader($pFilePath); 之前或之中做点什么。
  • 你能发布任何行的输出吗?
  • 这无关紧要,因为您将尝试将日期字段从2015201520152015-FebFeb-TueTue 解析为2015-02-10,这是不可能的,因为您不知道Tue(星期二)指的是日期@ 987654333@.
猜你喜欢
  • 1970-01-01
  • 2019-01-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多