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

fnx2tebb  于 2023-05-16  发布在  PHP
关注(0)|答案(5)|浏览(115)

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

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

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
UPDATE:这是我的操作代码(我在twig中有一个包含日期类型输入的表单):

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

    }
ee7vknir

ee7vknir1#

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

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

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

echo $date->format('d/m/Y');

基本上,您的误解是format方法不会修改$date对象,而只是返回所需的字符串。如果你看一下the documentation for the format method,你会发现:
返回根据给定格式格式化的日期
它说“returns”,意思是返回到调用的上下文:调用的表达式“被返回值替换”。如果它会在函数中输出它,那么手册会说“打印”或“输出”或“转储”之类的话。你可以阅读更多关于this part of the manual中“返回值”的含义。第一个示例显示了与您尝试执行的操作完全等效的操作:
Example #1使用return

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

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

t3irkdon

t3irkdon2#

使用格式:

$date->format('d/m/Y');

$date->format('m/d/Y');

(我不知道你的语言设置偏好)

f0ofjuux

f0ofjuux3#

如果您需要与另一个日期时间戳进行比较,只需像这样转换它:

<?php
  $literal = "1 week ago";
  $date = new DateTime($literal);
  $date->setTime(0,0);

  $timestamp = $date->getTimestamp();
?>
2admgd59

2admgd594#

我还想知道“如何从DateTime对象中只获取日期?“
只是为了好玩:

explode(" ",get_object_vars(new DateTime())["date"])[0]

returns(仅限今天):2023-05-15

g52tjvyc

g52tjvyc5#

你可以试试strtotime函数:date('d/m/Y',strtotime($date));

相关问题