drupal форма для расчета даты

Мне нужна функция, чтобы иметь возможность извлекать выбранную дату из date_popup в форме drupal, это моя форма и код, который я пробовал, я делаю форму для калькулятора беременности, и я новичок в drupal, мне нужно знать, как реализовать расчет даты в моей форме. В качестве тестирования я написал функцию для чтения выбранного значения, но она дает мне дату 1970-01-01

       <?php

           /*
           *Implementing hook_menu
           */
          function Pregnancy_menu() {
          $items['form/Pregnancy'] = array(
          'title' => 'Pregnancy Calculator',
          'page callback' => 'drupal_get_form',
          'page arguments' => array('Pregnancy_form'),
          'access callback' => TRUE,
          );
         return $items;
          }

      function Pregnancy_form($form_type) {

         $form['Pregnancy_Period'] = array(
         '#type' => 'date_popup',
         '#title' => 'Date of your last menstrual period',
         '#date_format' => 'Y-m-d',
         '#date_text_parts' => array('year'),
         '#date_increment' => 30,
         '#date_year_range' => '-1:0',
         '#default_value' => date(Y) . date(M) . date(D),
         );



          $form['Calculate_Forward'] = array(
          '#type' => 'submit',
          '#value' => t('Calculate Forward'),
            );

       $form['Reset_form'] = array(
       '#type' => 'submit',
       '#value' => t('Reset this Form'),
         );

      $form['Conception_result'] = array(
       '#type' => 'textfield',
        '#title' => t('Conception Occurred:(about two weeks after last menstrual   period)'),     
      '#prefix' => '<div style="float:left;">',
      '#suffix' => '</div>',
      );

  $form['First_trimester_Ends'] = array(
  '#type' => 'textfield',
  '#title' => t('First Trimester Ends :(12 weeks)'),     
  '#prefix' => '<div style="float:left;">',
  '#suffix' => '</div>',
);
$form['Second_trimester_Ends'] = array(
 '#type' => 'textfield',
 '#title' => t('Second Trimester Ends :(27 weeks)'),     
 '#prefix' => '<div style="float:left;">',
 '#suffix' => '</div>',
  );

    $form['Due_Date'] = array(
   '#type' => 'date_popup',
   '#title' => 'Estimated Due Date (40 weeks)',
   '#date_format' => 'Y-m-d',
   '#date_text_parts' => array('year'),
   '#description' => t('Plus or Minus 2 weeks'),
   '#date_increment' => 30,
   '#date_year_range' => '+1:+1',
   '#default_value' => date(Y) . date(M) . date(D),
  );

     $form['Calculate_Backward'] = array(
      '#type' => 'submit',
      '#value' => t('Calculate Backward'),
     );


  return $form;
  }

  function Pregnancy_form_submit($form, &$form_state) { 

// что я должен написать здесь, чтобы получить значение выбранной даты и добавить к нему определенное время. Для тестирования я использую:

   $selected_time= $_POST[''Pregnancy_Period'];
   $output=$selected_time;
   drupal_set_message($output);//but it's showing 1970-01-01


}

person sally    schedule 24.09.2011    source источник


Ответы (1)


Вы не хотите напрямую обращаться к переменным $_POST при использовании API форм Drupal, вместо этого используйте переменную $form_state, в частности ключ values.

В вашей функции отправки $form_state['values']['Due_Date'] будет содержать значение, введенное в текстовое поле, $form_state['values']['Second_trimester_Ends'] будет содержать ввод для этого поля и так далее.

Чтобы получить отдельные части даты, вы можете использовать:

list($year, $month, $day) = explode('-', $form_state['values']['Due_Date']);

Чтобы добавить время к этому значению, используйте комбинацию strtotime и mktime:

// Prepare a timestamp based on the received date at 00:00:00 hours
$date = mktime(0, 0, 0, $month, $day, $year);
$new_date = strtotime('+2 hours', $date);
$new_date_formatted = date('Y-m-d', $new_date);

Существует множество вариантов функции strtotime, просто взгляните на страницу документации, указанную выше.

надеюсь, это поможет

person Clive    schedule 24.09.2011
comment
как я могу взять каждую часть даты отдельно? - person sally; 24.09.2011
comment
Если мне нужно сделать расчет в javascript, как бы я это сделал - person sally; 26.09.2011