我有一个php项目,在这里我需要将一些数据从数据库导出到csv。我的数据包含“时间”,值为“7.00 PM
”。但是当我在cssv上导出它时,它显示“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 ..可能是微软的版本或可能是编辑器的任何内部设置。我不知道为什么会这样?
我需要一个解决方案来显示基于12小时的时间,即所有系统中的7.00 PM(独立于编辑器)
有没有人知道..或任何其他好的代码。请帮助我......
谢谢
答案 0 :(得分:1)
可能是Microsoft的版本,也可能是编辑器的任何内部设置
如果您在noteapad或其他文本编辑器中打开文件,您将看到实际存储的文本,这可能(可能)是“7.00 PM”。如果不是这种情况,请修改显示可重现位代码的问题,以生成带有“问题”的csv文件。
但是,如果您在Excel中打开文件,则不是只是打开文件 - 它正在通过导入过程运行。 Excel将尝试为每个列分配正确的类型,在这种情况下说它是一个日期,并适当地转换它。您所描述的是用户自己的Excel设置,用于表示日期。这意味着你的问题与php几乎没有关系 - 而且关于excel如何读取csv文件。
目前还不清楚为什么要这样做(知道原因,可能会导致不同的建议),但如果您使用单引号'
为字段值添加前缀,则会强制excel将单元格值表示为文本,而不是自动确定单元格/列类型:
$out .= '"\''.$val['pgm_time'].'",';
即。获得:
"foo","bar","'7.00 PM"
这可能会使csv文件对任何需要阅读它的其他进程有问题或无用
答案 1 :(得分:0)
你为什么要这么强迫?这是应该留给任何显示数据的东西之一。实际上,即使您要以12h格式输出数据,在Excel等中打开CSV也可能只是将其重新格式化为24h格式。最好以任何格式保留时间数据。