分割日期行并以所需格式显示

问题描述:

我正在尝试阅读包含以下日期的1000行文件:2017-09-04 yyyy-mm-dd mm yyyy dd。首先是日期,然后是当前格式,然后是将日期转换为所需格式。我试图从文件中读取所有数据到数组中,并在空间的基础上爆炸它。然后前三个阵列位置我正在采取所需的格式转换日期。但它说错误的意外异常。分割日期行并以所需格式显示

这里是我的代码:

<?php 
$homepage = file_get_contents("file.txt"); 

$keywords = preg_split("/[\s,]+/", $homepage); 

print_r($keywords); 
$len = count($keywords); 
for ($i = 0; $i <= $len; $i = $i + 2) { 

    $a = $keywords[$i]; 
    $b = $keywords[$i + 1]; 
    $c = $keywords[$i + 2]; 

    $date = new DateTime($a); 
    echo $date - > format($c); 
} 
?> 
+0

你为什么不使用['foreach'(http://php.net/manual/en/control-structures.foreach.php)-loop的'$关键字数组?抛出的异常在哪里? – empiric

+1

其中之一,那些格式字符串是无效的(参见:['date()'](http://php.net/manual/en/function.date.php#refsect1-function.date-parameters))for accepted格式化字符串]和两个你需要使用['DateTime :: createFromFormat()'](http://php.net/manual/en/datetime.createfromformat.php)从给定的日期时间字符串和格式。 – Sammitch

+0

你可以在这里发布实际文件的一部分吗? –

尝试这样的事情。问题是PHP不看像yyyy-mm-dd这样的格式,而是喜欢Y-m-d'. Which is what the preg_replace`函数。

<?php 
$homepage = "2017-09-04, yyyy-mm-dd, mmyyyydd"; 

$homepage = preg_replace('/yyyy/', 'Y', $homepage, -1); 
$homepage = preg_replace('/mm/', 'm', $homepage, -1); 
$homepage = preg_replace('/dd/', 'd', $homepage, -1); 

$keywords = preg_split("/[\s,]+/", $homepage); 

print_r($keywords); 
$len = count($keywords); 
for ($i = 0; $i < $len; $i += 3) { 

    $a = $keywords[$i]; 
    $b = $keywords[$i + 1]; 
    $c = $keywords[$i + 2]; 

    $date = date_create_from_format($b, $a); 
    echo $date->format($c); 
} 
?> 

Works here

+0

如果我试图从文件中读取具有当前格式和所需格式的多个日期的数据,该怎么办?所以在那种情况下如何将for循环移至第4个数组位置。 – Rahila

+0

对不起?你能发表一个你的数据的例子吗? –

+0

输入定义 此问题的输入文件将包含少于1000行的空格分隔的三元组。每行将包含日期,当前格式和所需的输出格式。 输出定义 输出应包含与给定输入文件相同的行数。每行应包含所需输出格式的给定输入日期。 示例输入 2017-09-04 yyyy-mm-dd mm * yyyy * dd 示例输出 09 * 2017 * 04 – Rahila