转换大量日期的有效方法 - PHP

时间:2017-02-15 10:15:27

标签: php mysql datetime optimization

我正在尝试为我的应用程序准备导入程序。 我是一个文件,非常简单但很大.txt。它有大约250k行,每行我需要将几列的日期格式改为' Y-m-d'。

我使用了strtotime()date(),但是有一些问题,我开始使用类DateTime,现在一切都很好,但导入它需要很多时间(比我使用strtotimedate时更多。)

//script do it every row
$date= new DateTime($values[1]);
$values[1]=$date->format('Y-m-d');
$date= new DateTime($values[2]);
$values[2]=$date->format('Y-m-d');

$values[]我有字符串,例如Jul 1 2004 12:00AM

使用此DateTime课程有更有效的方法吗?像定义$date一样,然后只改变它的值?我谷歌并尝试使用DateTime以多种方式做,但没有发现任何兴趣。

我仍然试图找出strtotime()的错误,在某些情况下,它没有得到正确的约会并放入mysql表 - > 1969-12-31。主要问题是我从外部提供商处获取此文件,并且每天都由cron运行。

看来文件中的某些日期格式非常奇怪:2013-01-30 15:04:30.717000000,清理后,它开始正常工作,我可以使用strtotime,当然比DateTime更快。

2 个答案:

答案 0 :(得分:0)

1359587070.717000

- >

select cast('2013-01-30 15:04:30.717000000' AS DATETIME(6));

2013-01-30 15:04:30.717000

- >

TIMESTAMP

也就是说,如果它注定要在MySQL数据库中,您可以将其存储为字符串,然后使用上面的代码转换为具有微秒精度的DATETIMEcd /d C:\Program Files (x86)\Java\jre1.8.0_121\bin 。 / p>

答案 1 :(得分:-1)

$dt = new DateTime();
foreach($timestamps as $timestamp) {
    $dt->setTimestamp($timestamp);
    var_dump($date->format('Y-m-d'));    
}