首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将字符串转换为UNIX时间戳

问将字符串转换为UNIX时间戳
EN

Stack Overflow用户
提问于 2011-11-24 10:27:23
回答 4查看 5.2K关注 0票数 2

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

我似乎不能让strtotime处理这个字符串。有没有办法反转数据函数?我唯一的选择是创建一个新的非默认php函数来转换字符串吗?

服务器运行的是PHP5、Apache2.2和CentOS 5.2.17。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-11-24 10:55:15

在PHP5.2中,可以使用strptime解析特定格式的日期-时间字符串,然后使用mktime将结果转换为时间戳。

代码语言:javascript
复制
$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
);

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

代码语言:javascript
复制
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函数的基础。

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2011-11-24 10:33:12

使用更现代的DateTime类(只要您使用的是>= 5.3)。

代码语言:javascript
复制
$unix = DateTime::createFromFormat('m/d/Y @ h:ia', '11/24/2011 @ 01:15pm')
        ->getTimestamp();

CodePad。

票数 4
EN

Stack Overflow用户

发布于 2011-11-24 10:38:50

如果您将“@”替换为空格,则strtotime应该能够在本地理解它。

代码语言:javascript
复制
<?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";
?>

输出:

代码语言:javascript
复制
x: 11/24/2011 01:15pm
y: 1322140500
z: 11-24-2011 @ 01:15pm
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8251568

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档