我正在尝试将字符串11/24/2011 @ 01:15pm
转换为UNIX时间戳。格式为m-d-Y @ h:ia
我似乎无法让strtotime
使用字符串。有没有办法扭转数据功能?我唯一的选择是创建一个新的非默认php函数来转换字符串吗?
服务器正在运行CentOS 5,Apache 2.2和PHP 5.2.17。
答案 0 :(得分:4)
使用更现代的DateTime
课程(只要你使用> = 5.3)。
$unix = DateTime::createFromFormat('m/d/Y @ h:ia', '11/24/2011 @ 01:15pm')
->getTimestamp();
答案 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