从PHP日期获取类似于“Y-m-d H:i:s”的日期格式

11

有没有办法从日期中获取一个包含日期格式的字符串?

<?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");
?>

出于性能考虑,我希望避免使用正则表达式,但我不知道这是否可行。

5个回答

10

您可以使用strtotime将字符串日期转换为时间戳,然后对时间戳进行所需的操作。 ;)

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

1
看起来他想要从日期反向推导格式。(例如,从“2009-10-16”到“Y-m-d”) - DMI

8
据我所知,没有一种保证能够逆推的方法。最好的方法可能是尝试使用正则表达式匹配预期的已知格式(例如 "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

5
唯一理解原帖问题的人! - MerchantProtocol.com

5

PHP的date()函数将时间戳格式化为更易读的日期和时间。在您的项目中尝试以下代码:

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

3
我知道现在已经很晚了,但是最好的做法是什么呢?
$date = date("Y-m-d");

-1

在while循环和双引号内

while($row = mysqli_fetch_assoc($result)) { 
    echo  " Date is:" ".date('d-M-Y H:i',(strtotime($row["Date_column_name"])))." ;
};

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接