PHPExcel 中的自定义日期格式
Custom date format in PHPExcel
在我从 PHP 构建的 excel 文件中,第一行是 header 行。我需要在 header 列中放置几个日期。每个日期(采用 dd/mm/yyyy 格式)15/mm/yyyy 从 15/01/2007 开始到 15/12/2018 结束,逐月递增。
我的代码是这样的:
for($anno = $annoMin; $anno<=$annoMax; $anno++){
for($mese = 1; $mese <= 12; $mese++){
$mese = sprintf("%02s", $mese);
$periodo = '15/'.$mese.'/'.$anno;
$periodo = strtotime($periodo);
$periodo = PHPExcel_Shared_Date::PHPToExcel($periodo);
array_push($header_array,$periodo);
}
}
我将日期构建为字符串,将其转换为 unix 时间戳,将其转换为 excel 日期并将其推送到 $header_array。
然后我在 excel:
中绘制单元格
$ews->fromArray($header_array, ' ', 'A1');
最后我将有日期的单元格格式化为:
$ews->getStyle('U1:EJ1')
->getNumberFormat()
->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_DATE_DDMMYYYY);
问题是:
- 实际上我的代码为每个带有日期的单元格返回 'False';
- 我需要添加 PHPExcel 库中未列出的自定义掩码:MM/YYYY 以显示在每个单元格中。
对于第一期:我检查了不同的SO问题并遵循了mainly this one。运气不好。
问题在这里:
$periodo = '15/'.$mese.'/'.$anno;
$periodo = strtotime($periodo);
这将给出 15/1/2015
、15/2/2015
...``15/12/2015that you're then attempting to convert to a unix timestamp using
strtotime()`.
的字符串值
如果您阅读 strtotime()
函数使用的 PHP Docs on date formats,您会看到 /
分隔符告诉 PHP 日期字符串是美国日期格式.... 即 mm/dd/yyyygiving a month value of
15` 在每种情况下,并且(当然)没有月份 15
使用破折号 (-
) 而不是 /
来表示欧洲 (dd-mm-yyyy
) 而不是美国日期格式
$periodo = '15-'.$mese.'-'.$anno;
$periodo = strtotime($periodo);
或重新排序值以使用美国格式
$periodo = $mese.'/'.'15/'.$anno;
$periodo = strtotime($periodo);
对于问题的第二部分....您几乎可以提供 MS Excel 可识别的任何格式掩码,您不限于内置格式;所以:
$ews->getStyle('U1:EJ1')
->getNumberFormat()
->setFormatCode('mm/yyyy');
格式代码只是一个字符串值
在我从 PHP 构建的 excel 文件中,第一行是 header 行。我需要在 header 列中放置几个日期。每个日期(采用 dd/mm/yyyy 格式)15/mm/yyyy 从 15/01/2007 开始到 15/12/2018 结束,逐月递增。 我的代码是这样的:
for($anno = $annoMin; $anno<=$annoMax; $anno++){
for($mese = 1; $mese <= 12; $mese++){
$mese = sprintf("%02s", $mese);
$periodo = '15/'.$mese.'/'.$anno;
$periodo = strtotime($periodo);
$periodo = PHPExcel_Shared_Date::PHPToExcel($periodo);
array_push($header_array,$periodo);
}
}
我将日期构建为字符串,将其转换为 unix 时间戳,将其转换为 excel 日期并将其推送到 $header_array。 然后我在 excel:
中绘制单元格$ews->fromArray($header_array, ' ', 'A1');
最后我将有日期的单元格格式化为:
$ews->getStyle('U1:EJ1')
->getNumberFormat()
->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_DATE_DDMMYYYY);
问题是:
- 实际上我的代码为每个带有日期的单元格返回 'False';
- 我需要添加 PHPExcel 库中未列出的自定义掩码:MM/YYYY 以显示在每个单元格中。
对于第一期:我检查了不同的SO问题并遵循了mainly this one。运气不好。
问题在这里:
$periodo = '15/'.$mese.'/'.$anno;
$periodo = strtotime($periodo);
这将给出 15/1/2015
、15/2/2015
...``15/12/2015that you're then attempting to convert to a unix timestamp using
strtotime()`.
如果您阅读 strtotime()
函数使用的 PHP Docs on date formats,您会看到 /
分隔符告诉 PHP 日期字符串是美国日期格式.... 即 mm/dd/yyyygiving a month value of
15` 在每种情况下,并且(当然)没有月份 15
使用破折号 (-
) 而不是 /
来表示欧洲 (dd-mm-yyyy
) 而不是美国日期格式
$periodo = '15-'.$mese.'-'.$anno;
$periodo = strtotime($periodo);
或重新排序值以使用美国格式
$periodo = $mese.'/'.'15/'.$anno;
$periodo = strtotime($periodo);
对于问题的第二部分....您几乎可以提供 MS Excel 可识别的任何格式掩码,您不限于内置格式;所以:
$ews->getStyle('U1:EJ1')
->getNumberFormat()
->setFormatCode('mm/yyyy');
格式代码只是一个字符串值