2015-10-19 102 views
0

我正在运行cron作业以将任务日期更改为当前星期。目前我正在更改日期,并将日期移至1周。本周同一天在php

电流控制器代码:

function weekly_tasks() 
{ 
    $this->load->model('tasksmodel'); 
    $data['weekly_tasks'] = $this->tasksmodel->get_weekly_tasks(); 
    var_dump($data); 

    foreach ($data['weekly_tasks'] as $row) 
    { 
     // change parent task date to next week 
     $date = $row->due_date; 
     $newdate = strtotime ('+1 week' , strtotime ($date)) ; 
     $newdate = date ('Y-m-j' , $newdate); 
     $row->due_date = $newdate; 

     // set up task update var 
     $task_update = $row; 
     $task_id = $row->task_id; 

     //create this week's task 
     $task_create = $row; 
     $this->tasksmodel->create_weekly_tasks($task_create); 
     var_dump($task_create); 


     // update the task to next week 
     $this->tasksmodel->update_weekly_tasks($task_update, $task_id); 

     var_dump($task_update); 

    } 
} 

上面的代码需要一个日期上周二零一五年十月十四日和更改日期相同平日本周2015年10月21日。

现在我需要采取过去的任何日期,并将其更改为当前星期的同一天与原始日期。因此2015/09/09应该在2015/10/21这周更新到同一天。

我是否仍然通过获取旧日期和今天之间的差异来使用区间,还是有更好的方法来做到这一点?

+0

你能举个例子说明你想要做什么吗? – Mitul

+0

添加了我的控制器代码以及更好的解释 –

+0

是'$ date'字符串还是Date类的实例? –

回答

0

我建议不要与字符串工作,但与DateTime类:

$date = new Date($row->due_date); 
    $newdate = new Date(); // this is obviously in the "current" week. 

    // get the week day of the "old" and "new" date: 
    $oldWD = $date->format("N"); 
    $newWD = $newdate->format("N"); 

    // set current weeks weekday as diff of weekday: 
    $diff = $oldWD - $newWD; 
    if ($diff > 0) 
     $newdate->add(new DateInterval("P" . $diff . "D")); 
    else if ($diff < 0) // $diff == 0 means no changes 
     $newdate->sub(new DateInterval("P" . abs($diff) . "D")); 

    // adjust times to the time of the old date 
    $newdate->setTime(date->format("H"), date->format("i"), date->format("s")); 

(现在不与$diff数学是否是正确的,没有测试过,可能是倒过来)