2016-11-09 5 views
0

Я использую fullcalendar.js, и у меня возникла проблема с часовым поясом. Он отлично работает, откуда я живу, но мой клиент, который живет в Канаде, Берлингтон не получает ту же дату, на которую он нажимает. я установил зону в -05: 00 (их зона), но не помогает, есть ли способ установить часовой пояс на локальный? , так что независимо от того, где вы получаете доступ к полному календарю, который он показывает.Полный календарь Даты разные в разных странах

enter image description here

Эти даты, которые highlited показаны 6 в Канаде, на ту же дату щелкнул.

это код, я использую, чтобы открыть модальное на dayclick

dayClick: function(date, jsEvent, view) { 
    var click = date._d; 
    var month = new Array(); 
    month[0] = "January"; 
    month[1] = "February"; 
    month[2] = "March"; 
    month[3] = "April"; 
    month[4] = "May"; 
    month[5] = "June"; 
    month[6] = "July"; 
    month[7] = "August"; 
    month[8] = "September"; 
    month[9] = "October"; 
    month[10] = "November"; 
    month[11] = "December"; 
    var weekday = new Array(7); 
    weekday[0]= "Sunday"; 
    weekday[1] = "Monday"; 
    weekday[2] = "Tuesday"; 
    weekday[3] = "Wednesday"; 
    weekday[4] = "Thursday"; 
    weekday[5] = "Friday"; 
    weekday[6] = "Saturday"; 
    $("#myModal").modal("show"); 

    document.getElementById("date").setAttribute("value", click.getFullYear() +"-"+ ("0"+ (click.getMonth()+1)).slice(-2)+"-"+("0" + click.getDate()).slice(-2)); 

    document.getElementById("month").setAttribute("value", month[click.getMonth()]); 
    document.getElementById("str_day").setAttribute("value", ("0" + click.getDate()).slice(-2)); 
    document.getElementById("end_day").setAttribute("value", weekday[click.getDay()]); 
    }, 
    eventResize: function(event, delta, revertFunc) { 
    console.log(event); 
    var title = event.title; 
    var end = event.end.format(); 
    var start = event.start.format(); 
    $.ajax({ 
     url: 'fullcalender/process.php', 
     data: 'type=resetdate&title='+title+'&start='+start+'&end='+end+'&eventid='+event.id, 
     type: 'POST', 
     dataType: 'json', 
     success: function(response){ 
     if(response.status != 'success') 
      revertFunc(); 
     }, 
     error: function(e){ 
     revertFunc(); 
     alert('Error processing your request: '+e.responseText); 
     } 
    }); 

И это код, который используется для добавления в базу данных

if($type == 'new') 
{ 
    $startdate = $_POST['startdate'].'+'.$_POST['zone']; 
    $title = $_POST['title']; 
    $insert = mysqli_query($con,"INSERT INTO calendar(`title`, `startdate`, `enddate`, `allDay`) VALUES('$title','$startdate','$startdate','false')"); 
    $lastid = mysqli_insert_id($con); 
    echo json_encode(array('status'=>'success','eventid'=>$lastid)); 
} 
+0

Check [этот SO ответ] (HTTP: // StackOverflow. com/a/439871/2159528), чтобы установить дату, основанную на времени UTC ... Если это не исправить вашу проблему, вам нужно будет показать код. –

+0

Я добавил код сейчас :) –

ответ

1

Насколько хранить ваши времена, они должны храниться как временная метка UTC. Для извлечения часового пояса я использую jstz, чтобы получить часовую зону пользователя, ее так же просто, как эти две строки.

var tz = jstz.determine(); 
var timezone = tz.name(); 

Это даст вам временную зону, как «Америка/Чикаго» для везде, где пользователь, это здорово, потому что вы не должны спрашивать у пользователя их часового пояса, и он будет работать в любом месте. Затем передайте свой timezone вместе со своим запросом на события, и вы можете использовать свой серверный язык для перехода от UTC к предоставленному часовому поясу при получении событий.

events: { 
    url: "calendarManager.php?request=get&timezone=" + timezone + "&userid=" + userID 
}, 

Вы также должны использовать

timezone: "local", 

в вашем календаре конфигурации, а затем конвертировать UTC пользователям локального часового пояса при возвращении события с помощью метода выше.

+0

Я пытаюсь найти эту строку в fullcalendar.js, но не могу найти это:/ –

+0

какая линия вы имеете в виду? Конфигурация не будет установлена ​​в fullcalendar.js, вы установите ее как параметр конфигурации при инициализации календаря. – Ryan89

+0

oh Спасибо :) хотя я сделал временное решение, так как клиент мог видеть предыдущую дату, на которую он нажал, поэтому я добавил 1 в дату, но я знаю, что это не постоянный способ сделать это, поэтому хотел сделать это постоянный :) –

0

Я на самом деле нашел проблему после 3-х дней, Проблема заключалась в том, я использовал GetDate(), с помощью getUTCDat() исправлена ​​проблема :)

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