是否有人知道一种方式来获得从包含日期的格式的日期字符串?

<?php
    $date = date ("2009-10-16 21:30:45");

    // smething like this?
    print date_format ($date);
?>

我问这个,因为我想优化这个功能我已经写了,通常获得与服务器不同的时区的日期,没有做特别的事情

<?php
function get_timezone_offset ($timezone, $date = null, $format = null, $offset_timezone = null) {
    if ($date == null) $date = date ($format);
    if ($offset_timezone == null) $offset_timezone = date_default_timezone_get ();
    if ($format == null) $format = "Y-m-d H:i:s";
    // I'd like to find a way that can avoid me to write $format and get it directly from the date i pass, but I don't know a particular method can do it
    // if ($format == null) $format = date_format ($date);

    $date_time = new DateTime ($date, new DateTimeZone ($offset_timezone));
    $date_time->setTimeZone (new DateTimeZone ($timezone));
    return $date_time->format ($format);
}

print get_timezone_offset ("Europe/Rome");
print get_timezone_offset ("Europe/Rome", date ("Y-m-d H:i:s"));
print get_timezone_offset ("Europe/Rome", date ("Y-m-d H:i:s"), "Y-m-d H:i:s");
print get_timezone_offset ("Europe/Rome", "2009-10-16 21:30:45", "Y-m-d H:i:s", "America/New_York");
?>

我希望避免因为性能原因正则表达式,但我不知道这是可能的。

有帮助吗?

解决方案

据我所知,有倒退的工作没有保证的方式。最好的办法可能是试图匹配预期的知名格式的正则表达式(例如,对于“Y-M-d” \d{2,4}[-/]\d{2}[-/]\d{2}),但我想不出一个简单的方法做匹配,而无需使用正则表达式。你还必须检查所分析的格式是有道理的,你不能做很多有关明确的日期,就像2009年3月第2个,这可以表示为09/03/022009-03-0202/03/0903/02/09,甚至09/02/03

其他提示

您可以将字符串转换日期的strtotime 以时间戳与任何你想要的东西的时间戳做。 ;)

<?php
$date = "2009-10-16 21:30:45";
$ts   = strtotime($date);
echo date('Y-m-d', $ts);
?>

在PHP日期()函数格式化的时间戳到一个更可读的日期和时间。试试这个代码对你的项目,

 <?php
    $date=date_create('2014-10-20');
    date_time_set($date,12,20,55);
    echo date_format($date,'Y-m-d H:i:s');
    ?>

我知道它的晚,但它是最好的事:

$date = date("Y-m-d");
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top