【问题标题】:How to get only the date from a DateTime object?如何仅从 DateTime 对象中获取日期?
【发布时间】:2017-09-04 20:36:53
【问题描述】:

我有一个 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

更新:这是我的操作代码(我在 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);

    }

【问题讨论】:

  • $date-&gt;format(..) 返回带有格式化日期的字符串。
  • PHP doesn't use MS Excel format masks for dates.... 阅读文档总是有帮助的
  • 请停止添加symfony标签,您的问题与symfony无关。
  • 请删除您在上次更新中添加的大代码块,它无助于澄清问题。其他用户的时间很宝贵,这是浪费。

标签: php datetime


【解决方案1】:

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

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,您会发现:

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

它说“返回”,这意味着返回到调用的上下文:调用的表达式“被返回值替换”。如果它会在函数中输出它,那么手册会说诸如“打印”或“输出”或“转储”之类的内容。您可以在this part of the manual 中了解更多关于“返回值”的含义。第一个示例显示了与您尝试执行的操作完全相同的内容:

示例 #1 使用 return

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

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

【讨论】:

    【解决方案2】:

    使用格式:

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

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

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

    【讨论】:

    • “你想做什么?” ---“所以我想得到这样的东西:09/04/2017”。
    • 我试过 date() 方法:它需要一个字符串 $date 像这样传递给它: date($date, $timestamp)
    • format('d/m/Y') 没有改变任何东西:我告诉我只想获取日期,不管是 09-04-2017 还是 09/04/ 2017
    • @Susan $datee= new \DateTime('today'); $date=$datee-&gt;format('d/m/Y'); - 此代码完全有效 ideone.com/Bqa0ZP。这是你打破的其他东西。
    • 效果很好!谢谢!
    【解决方案3】:

    如果您需要与另一个日期时间戳进行比较,只需将其转换为:

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

      • 我相信她可以尝试很多事情,但这个建议对她没有帮助。我相信这就是你收到所有这些反对票的原因。
      • 感谢 Paul 的评论,这真的很有帮助。我不是程序员,我已经开始 4 个月的时间将编码作为一种爱好。我在那个论坛上找到了很多帮助,所以我想尝试提供一个想法以提供帮助。事实是,我对这一切有点失望,因为这只是我的第一篇文章。我想在我再次尝试说出一个想法之前我必须成为专家......不用担心欢呼:)
      • 哈哈,不用担心。我可以想象这有点令人沮丧。随时寻求反馈。我绝对会建议您继续尝试,但请尊重可能正在阅读您的文本的数百或数千人的时间:尽最大努力为 OP 和所有其他读者提供最有帮助的答案。试着理解这个问题。做研究,如果你不是 100% 确定测试你的代码。我最近在短暂的地铁车程中通过手机快速发布了一些答案。那些收到了一些当之无愧的downvotes :) 经验教训。我删除了帖子。谢谢你的努力!干杯
      • 真的非常感谢您花时间给我这些建议。我现在明白这是帮助并同时变得更好的正确方法 :) .. 谢谢 ;)跨度>
      猜你喜欢
      • 1970-01-01
      • 2011-05-05
      • 2014-09-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多