从 php 日期获取日期格式,如“Ymd H:i:s”

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/1855304/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-25 04:04:28  来源:igfitidea点击:

Get date format like "Y-m-d H:i:s" from a php date

phpdatetimedateformatdate-format

提问by vitto

Does someone know a way to get a string from a date that contains the format of the date?

有人知道从包含日期格式的日期中获取字符串的方法吗?

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

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

I ask this because I'd like to optimize this function I've written, usually to get the date with a different timezone from a server, without doing particular things

我问这个是因为我想优化我写的这个函数,通常是从服务器获取不同时区的日期,而不做特定的事情

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

I hope to avoid regular expressions for performance reasons, but I don't know if this is possible

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

采纳答案by DMI

As far as I'm aware, there's no guaranteed way of working backwards. The best way might be to try to match regular expressions against expected well-known formats (e.g. \d{2,4}[-/]\d{2}[-/]\d{2}for "Y-m-d") but I can't think of an easy way to do the matching without using regular expressions. You would also have to check that the parsed format makes sense, and you can't do much about ambiguous dates like 2nd of March 2009, which could be represented as 09/03/02, 2009-03-02, 02/03/09, 03/02/09, or even 09/02/03.

据我所知,没有保证的反向工作方式。最好的方法可能是尝试将正则表达式与预期的众所周知的格式(例如\d{2,4}[-/]\d{2}[-/]\d{2}“Ymd”)进行匹配,但我想不出不使用正则表达式的简单方法来进行匹配。您还必须检查解析的格式是否有意义,并且您不能对 2009 年 3 月 2 日之类的模糊日期做太多处理,这些日期可以表示为09/03/022009-03-0202/03/0903/02/09甚至09/02/03

回答by hsz

You can convert string date to timestamp with strtotimeand do with the timestamp what ever you want. ;)

您可以使用strtotime将字符串日期转换为时间戳,并可以随心所欲地使用时间戳。;)

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

回答by DMI

The PHP date() function formats a timestamp to a more readable date and time. Try this code for you project,

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

回答by user4866285

I know it's late, but would it be best to do:

我知道为时已晚,但最好这样做:

$date = date("Y-m-d");