如何仅从 DateTime 对象中获取日期?

Sus*_*san 4 php datetime

我有一个 DateTime() 类型的变量,我只想获取它的日期以将其与其他日期变量进行比较。这是我尝试这样做的方法,但我得到了不需要的额外数据:

date_default_timezone_set('Africa/Tunis');
$date= new \DateTime('today');
$date->format('d/m/Y');
Run Code Online (Sandbox Code Playgroud)

var_dump($date)回报:object(DateTime)#617 (3) { ["date"]=> string(19) "2017-04-09 00:00:00" ["timezone_type"]=> int(3) ["timezone"]=> string(12) "Africa/Tunis" } 所以我想得到这样的东西:09/04/2017

更新:这是我的操作代码(我在树枝中有一个包含日期类型输入的表单):

 public function addArtAction(Request $request)
    {

        $article=new article();
        $em=$this->getDoctrine()->getManager();
        $title=$request->request->get('titre');
        $content=$request->files->get('contenu');
        $dtePub=$request->request->get('date');
        date_default_timezone_set('Africa/Tunis');
        $datee= new \DateTime('today');
        $date=$datee->format('d/m/Y');

        if($dtePub==$date)
        {
            $article->setTitre($title);
            $article->setCorps($content);
            $article->setEtat(true);
            $article->setDtePub($date);
            $em->persist($article);
            $em->flush();
            $this->get('session')->getFlashBag()->add('success','Votre article a été archivé!');
        }
        elseif($dtePub>$date)
        {
        $article->setTitre($title);
        $article->setCorps($content);
        $article->setEtat(false);
        $article->setDteArch($date);
        $article->setDtePub($dtePub);
        $em->persist($article);
        $em->flush();
        $this->get('session')->getFlashBag()->add('success','Votre article a été publié avec succès!');
        }
        elseif($dtePub<$date)
        {
            $this->get('session')->getFlashBag()->add('failure','Vous devez choisir une future date!');
        }
        var_dump($date);

    }
Run Code Online (Sandbox Code Playgroud)

Pau*_*wen 5

你正在这样做(几乎是正确的)。作为参考,复制粘贴您的代码:

date_default_timezone_set('Africa/Tunis');
$date= new \DateTime('today');
$date->format('d/m/Y');
Run Code Online (Sandbox Code Playgroud)

最后一行返回所需的字符串。如果你想输出,你可以echo

echo $date->format('d/m/Y');
Run Code Online (Sandbox Code Playgroud)

基本上你的误解是该format方法不修改$date对象,而只返回所需的字符串。如果您查看format方法的文档,您会发现:

返回根据给定格式格式化的日期

它说“返回”,意思是返回到调用的上下文:调用的表达式被返回值“替换”。如果它会在函数中输出它,那么手册会说“打印”或“输出”或“转储”之类的东西。您可以在手册的这一部分详细了解“返回值”的含义。第一个示例显示了您尝试执行的完全等效的操作:

Example #1 使用 return

<?php function square($num) {
  return $num * $num;
}
echo square(4);   // outputs '16'.
?>
Run Code Online (Sandbox Code Playgroud)

最后,关于var_dump:的使用,请注意这是为了调试目的,通常不用于向用户显示输出。var_dump通常只会转储给定对象的“对象的所有公共、私有和受保护属性”。您应该查看包含许多示例var_dump手册页


Leo*_*rov 1

使用格式:

$date->format('d/m/Y');
Run Code Online (Sandbox Code Playgroud)

或者

$date->format('m/d/Y');
Run Code Online (Sandbox Code Playgroud)

(我不知道你的语言环境偏好)

  • @Susan `$datee= new \DateTime('今天'); $date=$datee-&gt;format('d/m/Y'); ` - 这段代码完全有效http://ideone.com/Bqa0ZP。这是你打破的其他东西。 (2认同)