strtotime,然后转换为UNIX


strtotime and then convert to UNIX?

编辑

根据下面的注释,以下是我在实现mktime之前对字符串进行拆分/组合/转换的尝试。。。

$date1 = explode("T",'2005-03-27T00:00:00');
$date2 = explode("-", $date1[0]);
$try = mktime($time1,$time2,0,$date2[1],$date[2],$date[3]);
print $try; 

//打印:951793200

原始问题:

我继承了一个数据库,非常想将数据存储的奇怪方式转换为更友好的mysql。。。

同时,我得到一个文本字符串(yes…text)。。。我想转换成unixtime。。。

所以,我会得到一个字符串,看起来像这样:

2005-03-27T00:00:00凌晨03:00

我想把它转换成:

1111885200

日期和时间总是把我搞砸。。。我已经使用strtotime和mktime做了很多事情,但无法按照我想要的方式进行格式化。

好吧,我就是这么做的。

$ex = '2005-03-27T00:00:00 03:00 AM';
$format = '%Y-%m-%dT00:00:00 %H:%M %p';
$strf = strptime($ex, $format);
$date_str = $strf['tm_mon'] + 1 . '/' . $strf['tm_mday'] . '/' . ($strf['tm_year'] + 1900) . ' ' . $strf['tm_hour'] . ':' . $strf['tm_min'] . ':00';
echo $date_str;
echo "'n";
echo strtotime($date_str);
echo "'n";
echo date('m-d-Y H:i:s', 1111885200);

但是,根据你发布的日期,你想要的结果似乎并不正确。

输出

3/27/2005 3:0:00
1111921200
03-26-2005 17:00:00

您可以编写一个litte转换器脚本来完成任务。

请检查mktime 的可选参数

您可以尝试将字符串拆分为小时/分钟/秒/月/天/年,然后将其放入mktime中。然后mktime将为您提供相应的unix时间戳。

所以,除非绝对必要,否则我不喜欢正则表达式,但在这里,它们可能是挑选时区片段所必需的。

preg_match("/('d{4})-('d{2})-('d{2})(T'd{2}:'d{2}:'d{2}) ('d{2}:'d{2}) (AM|PM)/", '2005-03-27T00:00:00 03:00 AM',$matches);

会给你$matches,看起来像:

Array
(
    [0] => 2005-03-27T00:00:00 03:00 AM
    [1] => 2005
    [2] => 03
    [3] => 27
    [4] => T00:00:00
    [5] => 03:00
    [6] => AM
)

我会将这些片段输入到DateTime对象中。然后您可以将其输出为您想要的任何格式。您可能还需要对正则表达式进行一些调整,以便它能够处理您的所有日期。

如果T00:00:00部分没有用,只需将其移除并使用strtotime():

<?php
$date = '2005-03-27T00:00:00 03:00 AM';
$timestamp = strtotime(preg_replace('!T[^ ]+!', '', $date));
var_dump(date('d/m/Y H:i:s', $timestamp));
?>

此打印:

string(19) "27/03/2005 03:00:00"