0

我正在使用 fullcalendar.js,但时区有问题。它在我居住的地方运行良好,但我住在加拿大伯灵顿的客户没有得到他点击的同一日期。我已将区域设置为 -05:00(他们的区域)但没有帮助,有没有办法将时区设置为本地?所以无论您在哪里访问它显示的完整日历。

在此处输入图像描述

这些突出显示的日期在加拿大显示为 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));
}
4

2 回答 2

1

至于存储您的时间,它们应该存储为 UTC 时间戳。为了检索时区,我使用jstz来获取用户时区,就像这两行一样简单。

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

无论用户在哪里,这都会为您提供像“美国/芝加哥”这样的时区,这很棒,因为您不必向用户询问他们的时区,它可以在任何地方工作。然后将您的时区与您的事件请求一起传递,您可以在检索事件时使用服务器端语言从 UTC 转换为提供的时区。

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

您还应该使用

timezone: "local",

在您的日历配置中,然后在使用上述方法返回事件时从 UTC 转换为用户本地时区。

于 2016-11-09T18:27:01.593 回答
0

我实际上在 3 天后发现了问题,问题是我使用 getDate(),使用 getUTCDat() 解决了问题:)

于 2016-11-10T18:12:20.877 回答