Я использую виджеты 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, чтобы делать то, что мне нужно, и я в тупике. Любая помощь приветствуется.
Я должен указать, что я делаю это то же самое преобразование в другом месте, чтобы показывать события из базы данных и работает отлично. – PHPMachine