将字符串转换为UNIX时间戳

时间:2011-11-24 02:27:23

标签: php date time strtotime unix-timestamp

我正在尝试将字符串11/24/2011 @ 01:15pm转换为UNIX时间戳。格式为m-d-Y @ h:ia

我似乎无法让strtotime使用字符串。有没有办法扭转数据功能?我唯一的选择是创建一个新的非默认php函数来转换字符串吗?

服务器正在运行CentOS 5,Apache 2.2和PHP 5.2.17。

5 个答案:

答案 0 :(得分:4)

使用更现代的DateTime课程(只要你使用> = 5.3)。

$unix = DateTime::createFromFormat('m/d/Y @ h:ia', '11/24/2011 @ 01:15pm')
        ->getTimestamp();

CodePad

答案 1 :(得分:2)

在PHP 5.2下,您可以使用strptime来解析具有特定格式的日期时间字符串,然后使用mktime将结果转换为时间戳。

$timeString = '11/24/2011 @ 01:15pm';

$timeArray = strptime($timeString, '%m/%d/%Y @ %I:%M%p');
$timestamp = mktime(
    $timeArray['tm_hour'], $timeArray['tm_min'], $timeArray['tm_sec'], 
    $timeArray['tm_mon']+1, $timeArray['tm_mday'], $timeArray['tm_year']+1900
);

这应该被抽象为一个函数,可能是两个:

function strptimestamp($date, $fmt) {
    $timeArray = strptime($date, $fmt);
    return mktime(
        $timeArray['tm_hour'], $timeArray['tm_min'], $timeArray['tm_sec'], 
        $timeArray['tm_mon']+1, $timeArray['tm_mday'], $timeArray['tm_year']+1900
    );
}

function strpmy($date) {
    return strptimestamp($date, '%m/%d/%Y @ %I:%M%p');
}

对解析句点缩写的支持似乎因操作系统而异。如果上述内容在特定操作系统上不起作用,请尝试使用“%P”而不是“%p”,或者将时间字符串传递给strtoupper(或两者)。以下内容应该适用于任何操作系统,但最好让strptime来处理整个解析,因为以下内容不太适合作为通用strptimestamp函数的基础。

static $pm_abbrevs = array('pm' => 1, 'p.m.' => 1, 'µµ' => 1, 'µ.µ.' => 1);
$timeString = '11/24/2011 @ 01:15pm';

$timeArray = strptime($timeString, '%m/%d/%Y @ %I:%M');
$period = strtolower($timeArray['unparsed']);
if (isset($pm_abbrevs[$period])) {
    $timeArray['tm_hour'] += 12; 
}
$timestamp = mktime(
    $timeArray['tm_hour'], $timeArray['tm_min'], $timeArray['tm_sec'], 
    $timeArray['tm_mon']+1, $timeArray['tm_mday'], $timeArray['tm_year']+1900
);

答案 2 :(得分:0)

如果用空格替换'@',那么strtotime应该能够原生地理解它。

<?php
$x = "11/24/2011 @ 01:15pm";
$x = str_replace(" @ ", " ", $x);
$y = strtotime($x);
$z = date("m-d-Y @ h:ia", $y);
echo "x: $x<br />\n";
echo "y: $y<br />\n";
echo "z: $z<br />\n";
?>

输出:

x: 11/24/2011 01:15pm
y: 1322140500
z: 11-24-2011 @ 01:15pm

答案 3 :(得分:0)

区分大小写可能是您的问题http://php.net/manual/en/datetime.formats.php。 也许首先运行$ x到strtoupper()然后str_replace('@', '', $x)(注意它用空字符串替换@),然后尝试strtotime()。希望这会有所帮助。

答案 4 :(得分:0)

$search = array('/',',','@');
$replace = array('-','','');
echo strtotime( str_replace($search,$replace,'16/7/2013 @ 7:30AM') );

这会将您尝试转换为时间字符串的字符串部分替换为strtotime可接受的格式。您始终可以向阵列添加更多要替换的字符串部分。

此外,你不需要有最新的PHP。

输出:

1373952600