我有一个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);
}
答案 0 :(得分:1)
使用格式:
$date->format('d/m/Y');
或
$date->format('m/d/Y');
(我不知道你的语言环境偏好)
答案 1 :(得分: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,你会发现:
返回根据给定格式
格式化的日期
它说&#34;返回&#34;用这意味着返回到呼叫的上下文:呼叫的表达被替换为&#39;按返回值。如果它会在函数中输出它,那么手册就会说&#34;打印&#34;或&#34;输出&#34;或&#34;转储&#34;。您可以详细了解返回值&#39;在this part of the manual中表示。第一个示例显示了您尝试执行的操作的完全等效:
示例#1使用return
<?php function square($num) { return $num * $num; } echo square(4); // outputs '16'. ?>
最后,关于var_dump
的使用:请注意,这是出于调试目的,通常不用于向用户显示输出。 var_dump
通常只会转储&#34;对象的所有公共,私有和受保护属性&#34;给定对象的。你应该检查the var_dump
manual pages它包含很多例子。
答案 2 :(得分:-4)
你可以试试strtotime功能: 日期(&#39; d / m / Y&#39;,strtotime($ date));