php - 如何在 PHP 中将字符串 "[date] [time] to [time]"转换为两个日期时间

标签 php datetime

给定一个始终与这样的模式匹配的字符串

07-Dec-2016 5:15PM to 5:30PM

使用 PHP 创建两个可用于 MySQL 格式 yyyy-mm-dd hh:mm-ss 的日期时间的最简洁方法是什么?

让我自己的设备,我会用 substr 构建一些笨拙的东西,但我相信 PHP 可以直观地处理日期?

理想情况下:

function convertTimeGiven($timeString) {
     // some great code

     return $times;
}

echo convertTimeGiven($timeString)['start']; //output 2016-12-07 17:15:00
echo convertTimeGiven($timeString)['end'];   //output 2016-12-07 17:30:00

最佳答案

我会这样做:

<?php
    header("Content-type: text/plain");
    $dateTime = "07-Dec-2016 5:15PM to 5:30PM";
    $dateTime = str_replace(" to ", " ", $dateTime);
    $dateTime = explode(" ", $dateTime);
    print_r($dateTime);
    $date1 = strtotime("{$dateTime[0]} {$dateTime[1]}");
    $date2 = strtotime("{$dateTime[0]} {$dateTime[2]}");
    print_r(date("Y-m-d H:i:s", $date1));
    print_r(date("Y-m-d H:i:s", $date2));
?>

输出

Array
(
    [0] => 07-Dec-2016
    [1] => 5:15PM
    [2] => 5:30PM
)
2016-12-07 5:15 pm
2016-12-07 5:30 pm

函数表示

对于您的功能:

<?php
    function convertTimeGiven($dateTime) {
        $dateTime = str_replace(" to ", " ", $dateTime);
        $dateTime = explode(" ", $dateTime);
        $date1 = strtotime("{$dateTime[0]} {$dateTime[1]}");
        $date2 = strtotime("{$dateTime[0]} {$dateTime[2]}");
        return array(
            "start" => date("Y-m-d H:i:s", $date1),
            "end" => date("Y-m-d H:i:s", $date2)
        );
    }
?>

输出

<?php
    header("Content-type: text/plain");
    $dateTime = "07-Dec-2016 5:15PM to 5:30PM";
    function convertTimeGiven($dateTime) {
        $dateTime = str_replace(" to ", " ", $dateTime);
        $dateTime = explode(" ", $dateTime);
        $date1 = strtotime("{$dateTime[0]} {$dateTime[1]}");
        $date2 = strtotime("{$dateTime[0]} {$dateTime[2]}");
        return array(
            "start" => date("Y-m-d H:i:s", $date1),
            "end" => date("Y-m-d H:i:s", $date2)
        );
    }
    print_r(convertTimeGiven($dateTime));
?>
Array
(
    [start] => 2016-12-07 5:15 pm
    [end] => 2016-12-07 5:30 pm
)

参与两天

注意:如果事件在上午 12 点之后结束,您需要手动添加一天。

<?php
    header("Content-type: text/plain");
    $dateTime = "07-Dec-2016 11:15PM to 12:30AM";
    function convertTimeGiven($dateTime) {
        $dateTime = str_replace(" to ", " ", $dateTime);
        $dateTime = explode(" ", $dateTime);
        $date1 = strtotime("{$dateTime[0]} {$dateTime[1]}");
        $date2 = strtotime("{$dateTime[0]} {$dateTime[2]}");
        if ($date1 > $date2)
            $date2 = strtotime("{$dateTime[0]} {$dateTime[2]} + 1 day");
        return array(
            "start" => date("Y-m-d H:i:s", $date1),
            "end" => date("Y-m-d H:i:s", $date2)
        );
    }
    print_r(convertTimeGiven($dateTime));
?>

关于php - 如何在 PHP 中将字符串 "[date] [time] to [time]"转换为两个日期时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41292732/

相关文章:

c# - 运算符 >= 不能应用于字符串和日期时间类型的操作数

php - 关于IF语句中变量状态的问题

php - 在php中的exec命令中运行ffmpeg将mp4转换为ogg时系统将关闭

python - 将 Unix 时间戳转换为 AOE

python - 解析 Pandas 中的日期范围字符串

python - 从几秒钟创建一个 datetime.time 对象

c# - 比较日期时间,看看是否已经过去一小时

php - 如何使用 LDAP 和 PHP 从 Active Directory 安全组中检索用户信息

php - PHP MYSQL中的错误跟踪-是否有更多信息?

php - 如何将外部银行帐户设置为 Stripe Connect 中的默认帐户?