2016-11-09 10 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

チェック[この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

ああありがとう:) 私は一時的な解決策を作ったが、クライアントがクリックした前の日付を見ることができたので、日付に1を追加したが、これを行うための恒久的な方法ではない永久:) –

0

私は実際に 問題は、私はgetUTCDatを(使用してのgetDate()、 を使用していたし、3日後に問題を発見した)問題を修正しました:)

関連する問題