2012-11-02 114 views
0

我想在一个类中使用strtotimedate函数将日期添加到由3个变量组成的日期中,$month,$day,$year,我不知道我在做什么错误。日期从函数生成的表单提交并传递到strtotimephp strtotime和日期问题

<?php 
//Set vars 
$month=$_POST['month']; 
$day=$_POST['day']; 
$year=$_POST['year']; 

//Initalize class 
$init=new Some_Class(); 
$init->setVars($month,$day,$year); 

class Some_Class{ 

    private $someVar; 
    private $month; 
    private $day; 
    private $year; 

    public function setVars($var1,$var2,$var3) { 
     $this->month=$var1; 
     $this->day=$var2; 
     $this->year=$var3; 
    } 

    function __construct() { 

    } 


    function setDate(){ 
     $start=date("Y")-50; 
     $end=date("Y"); 

     $months=array('','January','February','March','April','May', 
     'June','July','August', 'September','October','November','December'); 

     // Month dropdown 
     $this->someVar='<select name="month">'; 

     for($i=1;$i<=12;$i++){ 
      $this->someVar.="<option value='".str_pad($i, 2, '0', STR_PAD_LEFT)."'>$months[$i]</option>"; 
     } 
     $this->someVar.="</select> "; 

     // Day dropdown 
     $this->someVar.='<select name="day">'; 
     for($i=1;$i<=31;$i++){ 
      $this->someVar.="<option $selected value='".str_pad($i, 2, '0', STR_PAD_LEFT)."'>$i</option>"; 
     } 
     $this->someVar.="</select> "; 

     // Year dropdown 
     $this->someVar.='<select name="year">'; 

     for($i=$start;$i<=$end;$i++){  
      $this->someVar.="<option value='$i'>$i</option>"; 
     } 
     $this->someVar.="</select> "; 

     return $this->someVar; 
    } 

    function setDays(){ 
     $this->someVar['date']=strtotime(implode('-', array($this->year,$this->month,$this->day))); 
     $this->someVar['new_date']=strtotime('+42 day',$this->someVar['date']); 
     return $this->someVar; 
    } 
} 

$setDate=$init->setDate();?> 
<form action="<?php $_SERVER['REQUEST_URI'];?>" method="post"> 

    <?php echo $setDate;?> 

    <input type="submit" value="submit" name="Submit"/> 
</form> 
<?php 
if(isset($month,$day,$year)){ 
    $setDays=$init->setDays(); 
    echo date('M d, Y',$setDays['new_date']); 
} 
?> 

如果我打印后的变量,我可以证实他们正在发送,但我不能完全弄清楚,为什么我不是setDays()获得返回数据。

任何想法?

编辑:

function setDays() { 
     $this->someVar = array(); 
     $this->someVar['date']=strtotime(implode('-', array($this->year,$this->month,$this->day))); 
     $this->someVar['new_date']=strtotime("+42 day",$this->someVar['date']); 
     return $this->someVar; 
    } 
+1

'$ this-> someVar'在您调用'setDays'时被初始化为一个字符串。 '$ this-> someVar ['date']'不是有效的字符串偏移量。如果在'setDays'函数中的第一个赋值之前插入'$ this-> someVar = array();'行,它应该可以工作。 – vstm

+0

谢谢!我已经在这上了两个小时,应该刚刚来到她的第一个! – dcd0181

回答

1

你应该试试这个:

$this->someVar['date']=strtotime(implode('-', array($this->year,$this->month,$this->day))); 
$this->someVar['new_date']=$this->someVar['date'] + 42 * 24 * 60 * 60; 

据我所知,strtotime()可用于添加的天数是这样的:

$date = strtotime('Y-m-d', time() . " +42 day"); 
+0

如果42天跨越DST更改? –

0

我重建了一些你的代码,因为它以某种方式给出一个错误。很可能你的变量someVar,它应该被声明为数组,在用作数组之前。

<?php 
//Set vars 
$month=$_POST['month']; 
$day=$_POST['day']; 
$year=$_POST['year']; 

//Initalize class 
$init=new Some_Class(); 
$init->setVars($month,$day,$year); 

class Some_Class{ 

    private $someVar; 
    private $month; 
    private $day; 
    private $year; 

    public function setVars($var1,$var2,$var3) { 
     $this->month=$var1; 
     $this->day=$var2; 
     $this->year=$var3; 
    } 

    function __construct() { 

    } 


    function setDate(){ 
     $start=date("Y")-50; 
     $end=date("Y"); 

     $months=array('','January','February','March','April','May', 
    'June','July','August', 'September','October','November','December'); 

     // Month dropdown 
     $this->someVar='<select name="month">'; 

     for($i=1;$i<=12;$i++) 
     { 
      $this->someVar.="<option value='".str_pad($i, 2, '0', STR_PAD_LEFT)."'>$months[$i]</option>"; 
     } 
     $this->someVar.="</select> "; 

     // Day dropdown 
     $this->someVar.='<select name="day">'; 
     for($i=1;$i<=31;$i++) 
     { 
      $this->someVar.="<option value='".str_pad($i, 2, '0', STR_PAD_LEFT)."'>$i</option>"; 
     } 
     $this->someVar.="</select> "; 

     // Year dropdown 
     $this->someVar.='<select name="year">'; 

     for($i=$start;$i<=$end;$i++) 
     {  
      $this->someVar.="<option value='$i'>$i</option>"; 
     } 
     $this->someVar.="</select> "; 

     return $this->someVar; 
    } 

    function setDays(){ 
    $array_date = array(); 
     $array_date['date'] = implode('-', array($this->year,$this->month,$this->day));echo implode('-', array($this->year,$this->month,$this->day)); var_dump($array_date); 
     $array_date['new_date'] = strtotime($array_date['date'].' +42 day'); 
     return $array_date; 
    } 
} 

$setDate=$init->setDate();?> 
<form action="<?php $_SERVER['REQUEST_URI'];?>" method="post"> 

    <?php echo $setDate;?> 

    <input type="submit" value="submit" name="Submit"/> 
</form> 
<?php 
if(isset($month,$day,$year)){ 
    $setDays=$init->setDays(); 
    echo date('M d, Y',$setDays['new_date']); 
} 
?>