2012-06-13 4 views
2

Я использую виджеты jQuery DatePicker и Dialog для взаимодействия с fullCallendar от Adam Shaw http://arshaw.com/fullcalendar. У меня много работы. Я могу использовать DatePicker для перехода к определенной дате в fullcalendar. Когда я делаю выбор для заказа события, открывается диалоговое окно jQuery, и я использую вызов ajax для отправки полей в php-скрипт для обработки данных.fullCalendar Проблемы с преобразованием временной метки UNIX с событием выбора

Моя проблема, однако, исходит из временных меток UNIX, используемых в начальных и конечных переменных fullcalendar. Я устанавливаю глобальную переменную в верхней части моего html-файла и устанавливаю время начала/окончания из выделения в полнокалендарном порядке, чтобы данные передавались в диалоговое окно. Из диалогового окна я передаю его в свой PHP-скрипт. Но когда я конвертирую эту временную метку UNIX в дату в формате «YmjHis», я получаю странные результаты.

Вот соответствующий код из метода «выберите» в fullcalendar:

select: function(start, end, allDay) { 
     // need to check the day first. If the selected day/time < today, throw an alert 
     // otherwise allow the booking of the conference. 
      var now = calendar.fullCalendar('getDate'); 
      if (start < now) 
      { 
       alert('You cannot book a conference in the past!'); 
       calendar.fullCalendar('unselect'); 
      } 
      else 
      { 
            // set the global variables 
       st = start; 
       et = end; 

       $('#dialog-form').dialog('open'); // open the dialog form 
      } 

      }, 

Теперь, в диалоговом окне делает это (который в основном берется непосредственно из страницы примеры JQuery UI:

$("#dialog-form").dialog({ 
     autoOpen: false, 
     height: 300, 
     width: 350, 
     modal: true, 
     buttons: { 
      "Create Event": function() { 
       var bValid = true; 
       allFields.removeClass("ui-state-error"); 

       bValid = bValid && checkLength(name, "name", 3, 25); 
       bValid = bValid && checkLength(title, "title", 1, 20); 
       bValid = bValid && checkLength(email, "email", 6, 80); 
       bValid = bValid && checkLength(ports, "ports", 1, 2); 

       bValid = bValid && checkRegexp(name, /^[a-z]([0-9a-z_])+$/i, "Name may consist of a-z, 0-9, underscores, begin with a letter."); 
       // From jquery.validate.js (by joern), contributed by Scott Gonzalez: http://projects.scottsplayground.com/email_address_validation/ 
       // change to ensure a domain email address 
       bValid = bValid && checkRegexp(email, /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i, "eg. [email protected]"); 

       if (bValid) { 
        // code to insert into DB goes here 
        // need to somehow grab either a global variable or access 
        // full calendar start/end times from the selection phase 
        // in order to pass to the DB. 
        $.ajax(
        { 
         url: "bookings.php", 
         type: "POST", 
         data: {e: email.val(), t: title.val(), n: name.val(), p: ports.val(), start: +st, end: +et},     
         dataType: "HTML", 
         success: function(data) { 
           $('.result').html(data); 
           // reload fullCalendar here maybe?? 
          } 
        }); 
        $(this).dialog("close"); 
       } 
      }, 
      Cancel: function() { 
       $(this).dialog("close"); 
      } 
     }, 
     close: function() { 
      allFields.val("").removeClass("ui-state-error"); 
     } 
    }); 

Хорошо, теперь мой файл bookings.php только имеет следующий тестовый код:

$file = 'variables.txt'; 
$arr= $_REQUEST; 
$fp = fopen($file, 'w') or die('Could not open file!'); 
fwrite($fp, "variables are:\n"); 
foreach ($arr as $key => $value) { 
    $toFile = "Key: $key; Value: $value \n"; 
// write to file 
fwrite($fp, "$toFile") or die('Could not write to file'); 
} 

// DEBUG CODE write some blank space 
fwrite($fp, "\n\n") or die('Could not write to file'); 
$startTime = $_REQUEST['start']; 
$endTime = $_REQUEST['end']; 

$start = date('YmjHis', $startTime); 
fwrite($fp, "start time: $startTime = $start\n") or die('Could not write to file'); 
$end = date('YmjHis', $endtime); 
fwrite($fp, "end time: $endTime = $end\n") or die('Could not write to file'); 

// close file 
fclose($fp); 

Когда я выгляжу т мой файл variables.txt, я вижу это:

Key: e; Value: [email protected] 
Key: t; Value: blah 
Key: n; Value: blah 
Key: p; Value: 2 
Key: start; Value: 1339610400000 
Key: end; Value: 1339617600000 


start time: 1339610400000 = 444200724160000 
end time: 1339617600000 = 19691231160000 

Что я ожидал бы для начала и окончания, чтобы иметь формат, как: 20120613113000, ой, и не заканчивается с 1969 года датой.

Поэтому я, очевидно, что-то не так в моих преобразованиях. Это последнее препятствие для полной реализации fullCalendar, чтобы делать то, что мне нужно, и я в тупике. Любая помощь приветствуется.

+0

Я должен указать, что я делаю это то же самое преобразование в другом месте, чтобы показывать события из базы данных и работает отлично. – PHPMachine

ответ

0

Прямо сейчас, похоже, что в начале и в конце времени слишком много нулей. Я предполагаю, что он получает прокладку по какой-то причине, когда вы вытаскиваете ее из запроса.

Unix Преобразование

время_запуска
1339610400000 = 07/24/20 @ 6:00:00 вечера EST в (M/D/Y @ час: мин: сек)

EndTime 1339617600000 = 10/16/20 @ 2:00:00 am EST in (M/D/Y @ h: m: s)

Я думаю, что вы работаете с датой не в 2020 году, а в 2012 году, поэтому я сокращаю числа выше 10 цифр (текущий TS по состоянию на 6/12/2012 @ 12:57 pm = 1339610258)

Start Time 1339610400 = 06/12/12 @ 1:00:00 вечера EST

End Time 1339617600 = 06/13/12/@ 3:00:00 вечера EST

Теперь это выглядит больше как дату, которую вы забронировали в календаре.

Я предполагаю, что вы получаете дополнительные нули, где в вашей дате.

+0

Да, я заметил это, но не уверен, почему и где это происходит. Я инициализирую переменные до 0 при объявлении, а затем просто устанавливаю их позже. Так что я действительно не понимаю. Но он должен работать, если я усекаю метку времени до 10 символов вместо 13. Попробуем это и вернемся к вам. – PHPMachine

+0

ok, если я делаю субстрат на входе так: $ start = substr ($ _ REQUEST ['start'], 0, 10); $ end = substr ($ _ REQUEST ['end'], 0, 10); В итоге я получаю следующее: Ключ: start; Значение: 1339695000000 Ключ: конец; Значение: время 1339700400000 старта: 1339695000 = 20120614103000 Время окончания: 1339700400 = 19691231160000 Хотя время начала правильно, то конечное время должно быть 20120615120000, но вместо этого я получаю 1969 год. – PHPMachine

+0

в диалоговом окне jquery, где + st и + et вычисляются из –

Смежные вопросы