0

我有一个 php 项目,在这里我需要将一些数据从数据库导出到 csv。我的数据包含“时间”,值为“ 7.00 PM”。但是当我在 csv 上导出它时,它显示“ 19.00”。但我想显示“ 7.00 PM”这是代码的一部分

$out  .= '"'.$val['first_name'].'",';
$out  .= '"'.$val['second_name'].'",';
$out  .= '"'.$val['pgm_time'].'",';
$f = fopen ('registered_users.csv','w');

// Put all values from $out to export.csv. 
fputs($f, $out);
fclose($f);

header('Content-type: application/csv');
header('Content-Disposition: attachment; filename="registered_users.csv"');
readfile('registered_users.csv');

我刚刚输出了所有这些值,然后它显示正确的时间(7.00 Pm)。但导出后显示 19.0 。我的数据库也包含正确的值(7.00 Pm)我已经在不同的系统中检查了这个。在某些系统中是可以的。但在某些显示 19.00.. 可能是 Microsoft 的版本或可能是编辑器的任何内部设置。我不知道为什么会这样?

我需要一个解决方案来显示基于 12 小时的时间,即所有系统中的 7:00 PM(独立于编辑器)

有谁知道..或任何其他好的代码。请帮助我...

谢谢

4

2 回答 2

1

找对地方

可能是微软的版本,也可能是编辑器的任何内部设置

如果您在记事本或其他文本编辑器中打开文件 - 您将看到实际存储的文本,(可能)是“7.00 PM”。如果不是这种情况,请修改显示可重现代码的问题,以生成带有“问题”的 csv 文件。

但是,如果您在 Excel 中打开文件,您不仅仅是在打开文件 - 它正在通过导入过程运行。Excel 将尝试为每一列分配正确的类型,在这种情况下说它是一个日期,并适当地转换它。您所描述的是用户自己的 Excel 设置如何表示日期。这意味着您的问题与 php 几乎没有关系 - 而是关于 excel 如何读取 csv 文件。

在 excel 中强制 csv 文件“显示为文本”

目前尚不清楚您为什么要这样做(知道为什么,可能会导致不同的建议),但是如果您在字段值前加上单引号,'这将强制 excel 将单元格值表示为文本,而不是自动确定单元格/列类型:

$out  .= '"\''.$val['pgm_time'].'",';

即获得:

"foo","bar","'7.00 PM"

这可能会使 csv 文件对需要读取它的任何其他进程有问题或无用

于 2013-01-15T07:34:23.813 回答
0

为什么要强求呢?这是应该留给任何显示数据的东西之一。事实上,即使您要以 12 小时格式输出数据,在 Excel 等中打开 CSV 也可能只是将其重新格式化为 24 小时格式。最好以任何格式保留时间数据。

于 2013-01-15T07:21:21.147 回答