【问题标题】:DateTime::CreateFromFormat for PHP 5.2.14 [duplicate]PHP 5.2.14 的 DateTime::CreateFromFormat [重复]
【发布时间】:2013-06-09 05:20:06
【问题描述】:

我正在使用以下代码将用户输入转换为 mysql 时间戳。

$datetime = DateTime::createFromFormat('m/d/Y g:i a', "{$exp}");
$timestamp = $datetime->format('Y-m-d H:i:s');

$exp 等于:06/12/2013 6:41 pm

这在我运行 PHP 5.4.3 的本地服务器上运行良好,但是当我将相同的脚本上传到我的托管服务器时,它不想运行这部分可能是因为 PHP 版本的不同。

我将如何解决这个问题或替代它?谢谢!

【问题讨论】:

  • 您的托管服务器运行的是什么 PHP?

标签: php mysql datetime timestamp


【解决方案1】:

您可以像这样扩展 DateTime 类并自己实现createFromFormat():-

class MyDateTime extends DateTime
{
    public static function createFromFormat($format, $time, $timezone = null)
    {
        if(!$timezone) $timezone = new DateTimeZone(date_default_timezone_get());
        $version = explode('.', phpversion());
        if(((int)$version[0] >= 5 && (int)$version[1] >= 2 && (int)$version[2] > 17)){
            return parent::createFromFormat($format, $time, $timezone);
        }
        return new DateTime(date($format, strtotime($time)), $timezone);
    }
}

$dateTime = MyDateTime::createFromFormat('Y-m-d', '2013-6-13');
var_dump($dateTime);
var_dump($dateTime->format('Y-m-d'));

这适用于所有版本的 PHP >= 5.2.0。

查看这里的演示http://3v4l.org/djucq

【讨论】:

    【解决方案2】:

    从特定日期制作时间戳...:

    $time = "06/12/2013 6:41 pm";
    $format = "%m/%d/%Y %l:%M %P";
    $ts = strptime($time, $format);
    $ts = mktime($ts['tm_hour'], $ts['tm_min'], $ts['tm_sec'], $ts['tm_mon'], $ts['tm_mday'], ($ts['tm_year'] + 1900));
    

    之后就可以随意使用了:

    $mysql_timestamp = date("Y-m-d H:i:s", $ts);
    

    【讨论】:

    • 我得到:致命错误:调用未定义函数 strptime()
    • strptime 仅适用于 Linux 操作系统
    • 错了,在Windows操作系统下没有实现,在OS X下也可以。
    猜你喜欢
    • 2017-11-01
    • 2012-04-24
    • 1970-01-01
    • 2011-07-20
    • 1970-01-01
    • 1970-01-01
    • 2014-08-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多