дата функции javascript - PullRequest
       4

дата функции javascript

0 голосов
/ 26 сентября 2011

У меня есть эта форма в Drupal, которая содержит два средства выбора даты и два текстовых поля. Мне нужно написать функцию, которая обновляет значения в двух текстовых полях. Итак, в текстовое поле first_result мне нужно добавить 35 дней, а в текстовое поле second_result мне нужно добавить 3 месяца и установить эти значения в двух текстовых полях, а в datepicker due_date мне нужно обновить это поле, чтобы добавить один год и 45 дней. :

Мой код:

  <?php

  drupal_add_js(drupal_get_path('module', 'Date') .'/script.js');


 function Pregnancy_menu() {


   $items['form/Date'] = array(
   'title' => 'Date Calculator',
    'page callback' => 'drupal_get_form',
    'page arguments' => array('Date_form'),
    'access callback' => TRUE,
    );
    return $items;
     }


   function Date_form($form_type) {
   drupal_add_js(drupal_get_path('module', 'Date') .'/script.js');


    $form['First_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' => 'button',
     '#value' => t('Calculate Forward'),
     '#attributes' => array('onclick' => "testing()"),
      );


       $form['Reset_form'] = array(
       '#name' => 'clear',
    '#type' => 'button',
    '#value' => t('Reset this Form'),
    '#attributes' => array('onclick' => 'this.form.reset(); return false;'),
      ); 


       $form['First_result'] = array(
      '#type' => 'textfield',
      '#title' => t('first result'),     
      '#prefix' => '<div style="float:left;">',
      '#suffix' => '</div>',
 '#default_value' => 'Hello',


     ); 

     $form['Second_result'] = array(
    '#type' => 'textfield',
    '#title' => t('second result'),     
    '#prefix' => '<div style="float:left;">',
    '#suffix' => '</div>',
    );

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




  return $form;
  }

// функция javascript script.js

var testing()=function()
 {
 //how to do the calculation here

 } 

1 Ответ

0 голосов
/ 26 сентября 2011

Это зависит от того, что вы подразумеваете под месяцем?а что ты имеешь в виду под годом?

Если это 31 января, и вы добавляете 3 месяца, это означает, что добавление 3 наборов по 30 дней (в среднем по месяцу) или увеличение значения месяца в 3 раза приводит к тому, что оно становится 31 апреля (которого не существует).

А под годом вы подразумеваете добавление 365 дней или 29 февраля 2004 г. -> 29 февраля 2005 г. (опять второй не существует).

Манипулирование датами имеет смешное количество граничных случаев,так что вам действительно нужно определить, что вы собираетесь делать.Простейшим решением было бы использовать только дни, а затем преобразовать их в миллисекунды, затем добавить их к вашим текущим датам valueOf (), а затем преобразовать обратно в дату:

function addDays( fromDate, numDays ) {
    var millisecondsInDay = 1000 * 60 * 60 * 24;
    return new Date( fromDate.valueOf() + (millisecondsInDay * numDays) );
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...