Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何将Zend DateTime元素设置为';0000-00-00:00:00';?_Php_Date_Datetime_Zend Framework_Zend Framework2 - Fatal编程技术网

Php 如何将Zend DateTime元素设置为';0000-00-00:00:00';?

Php 如何将Zend DateTime元素设置为';0000-00-00:00:00';?,php,date,datetime,zend-framework,zend-framework2,Php,Date,Datetime,Zend Framework,Zend Framework2,我使用的是Zend Framework 2 DateTimeSelect。如何将值(在窗体类或控制器中)设置为“0000-00-00:00:00”?目前它默认为年底。在控制器中尝试以下操作时,我得到以下结果 $date = date("0-0-0 0:0:0"); `This gives me the date as November 30th` $date = '0000-00-00 00:00:00';`This gives me the date as November 30th` $d

我使用的是Zend Framework 2 DateTimeSelect。如何将值(在窗体类或控制器中)设置为“0000-00-00:00:00”?目前它默认为年底。在控制器中尝试以下操作时,我得到以下结果

$date = date("0-0-0 0:0:0"); `This gives me the date as November 30th`
$date =  '0000-00-00 00:00:00';`This gives me the date as November 30th`
$date =  NULL; `This gives me the current date time.` 

 $form->get('datetime')->setValue($date);
在任务完成之前,我希望将此字段保留为空或为0

非常感谢
马特

你可能对公元前1年和公元前1年的年份计算有误解

基督诞生前的最后一天是公元前12月1日的30日,紧接着就是公元1月1日(安诺·多米尼)。从历史上讲,没有第0年,而是从第一年开始

这意味着,如果我们创建DateTime对象并将日期设置为day=0,month=0,year=0,则仍将在before christus日期区域中

$test = new DateTime();
$test->setDate(0, 0, 0);
//I left out timezone settings so it'll take the default timezone
var_dump($test); exit;
结果是:

对象(日期时间)#1(3){[“日期”]=>string(20)”-0001-11-30 00:00:00“[“时区类型”]=>int(3)[“时区”]=>string(13)“欧洲/柏林”}

现在,与setDate方法不同,构造函数将字符串作为参数,解析为时间对象。这基本上是在最后用相同的

日=0 月份=0 年份=0

这同样会输出:

对象(日期时间)#1(3){[“日期”]=>string(20)”-0001-11-30 00:00:00“[“时区类型”]=>int(3)[“时区”]=>string(13)“欧洲/柏林”}

这使我得出这样的结论:使用开箱即用的DateTime对象类来呈现特定的日期“0000-00-00:00:00:00”在文学上是不可能的,在历史上也是不正确的


你能详细解释一下你为什么要这样做吗?

为什么不使用空选项?我该怎么做?“空选项”=>“0-0-0 0:0:0”给出了今天的日期和时间。如果用户填写表单时包含提交和完成日期,则该用户会选择。提交日期默认为今天的日期。任务完成后(可能在提交后几天)将编辑完成日期。理想情况下,在完成之前,该值应为null或0。作为一种变通方法,我可以用过去的假日期填充它,并且知道这些日期是不完整的(还有一种状态,即“已完成”、“已提交”和“正在进行”)。我很感谢你的解释。在你的数据库中有两个字段不是更好吗?一个有提交的值,另一个正在完成?这样,您只需查询即可跟踪已完成的字段?这是我当前提交的\u date\u字段和completed\u date\u字段。在persistane中,您只需将字段设置为null即可。它必须在数据库表中为空。只要不构建完成的日期字段,如果它是条目的初始创建,即首次提交表单。
-0001-11-30 looks a bit weird since php counts months beginning with 0 = January, .... , 11 = December.