首页 > 解决方案 > 如何从表单输入字段中将月份添加到日期

问题描述

当通过表单字段输入一个日期时,我正在尝试添加 12 个维护提醒。这些维护提醒中的每一个都在每个月的同一日期。运行一些基本验证后,我启动了一个 for 循环来执行此操作。问题是:第一个提醒日期是完美的,但 11 个日期都是 0000-00-00。我尝试在网上查看解决方案,但无法解决这个问题。

$this->load->model('Site_Model');
    $this->load->model('Maintenance_Model');
    $data['sites'] = $this->Site_Model->view_all_sites();

    if($this->input->post('save'))
    {
    $this->form_validation->set_rules('site_id', 'Site ID', 'trim|required');
    $this->form_validation->set_rules('date', 'Maintenance Date', 'trim|required');

    $var = $this->input->post('date');
    $date = str_replace('/', '-', $var);
    $main_date = date('Y-m-d', strtotime($date));

        if ($this->form_validation->run()){

            for ($x = 1; $x <= 12; $x++) {


                $maintenance_data = array(
                        'site_id' => $this->input->post('site_id'),
                        'date' => $main_date
                        );

                $this->Maintenance_Model->add_maintenance($maintenance_data); 
                $main_date = strtotime(date("Y-m-d", strtotime($date)) . "+1 month");

            }   

                $this->session->set_flashdata('success','Maintenance Scheduled Successfully');
                redirect('dashboard/add_maintenance');
            }else{
                $this->session->set_flashdata('failure', validation_errors());
                redirect('dashboard/add_maintenance');
            }
    }else {
            $this->load->view('templates/header' , $data);
            $this->load->view('dashboard/add_maintenance' , $data);
            $this->load->view('templates/footer' , $data);
          }

标签: phpcodeigniterdatecodeigniter-3

解决方案


问题出在你的 for 循环第一次运行时它的格式正确,$main_date但第二次它的格式改变了,这就是为什么它在接下来的 11 次中不起作用的原因。此外,您还想$main_date在 for 循环的以下行中使用。

$main_date = strtotime(date("Y-m-d", strtotime($date)) . "+1 month");

我想借此机会解释一下这个解决方案会给你带来问题,例如看一下之前提出的这个问题。

所以我想建议使用库Carbon来计算日期和时间


推荐阅读