DatePicker 和 FullCalendar 总是短一天

Posted

技术标签:

【中文标题】DatePicker 和 FullCalendar 总是短一天【英文标题】:DatePicker and FullCalendar is always a day short 【发布时间】:2014-12-16 15:09:24 【问题描述】:

我正在使用此代码将预订插入数据库。

日期选择器

<script type='text/javascript'>
  $(document).ready(function() 
     $('#dp1, #dp2').datepicker(
         autoclose: true,
         format: "yyyy-mm-dd"
     );
  );
</script>

SQL

<?php
session_start();

$dbh = new PDO('mysql:host=localhost;dbname=calendar', 'user', 'pass');

$stmt = $dbh->prepare("INSERT INTO bookings (forename, surname, badge, colour, start, end) VALUES (:forename, :surname, :badge, :colour, STR_TO_DATE(:dp1,'%Y-%m-%d'), STR_TO_DATE(:dp2,'%Y-%m-%d'))");

foreach ($_POST as $key => $value) 
    $stmt->bindParam("$key", $_POST[$key]);


$stmt->execute();

header("Location: /");
?>

SQL 表

mysql> SELECT * FROM bookings;
+----+----------+---------+-------+--------+---------------------+---------------------+---------------------+
| id | forename | surname | badge | colour | start               | end                 | timestamp           |
+----+----------+---------+-------+--------+---------------------+---------------------+---------------------+
|  1 | John     | Doe     | 1     | black  | 2014-10-27 00:00:00 | 2014-10-31 00:00:00 | 2014-10-21 13:11:50 |
+----+----------+---------+-------+--------+---------------------+---------------------+---------------------+
1 row in set (0.00 sec)

这是周一至周五的预订,但显示为周一至周四。

SQL 查询

<?php
$dbh = new PDO('mysql:host=localhost;dbname=calendar', 'user', 'pass');

$stmt = $dbh->prepare("SELECT * FROM bookings");

$stmt->execute();

$return_array = array();
$event_array;

while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) 
  $event_array = array();

  $event_array['id'] = $row['id'];
  $event_array['title'] = $row['forename'] ." ". $row['surname'];
  $event_array['start'] = $row['start'];
  $event_array['end'] = $row['end'];
  $event_array['allDay'] = true;

  $event_array['className'] = $row['colour'];

  array_push($return_array, $event_array);


echo json_encode($return_array);
?>

完整日历

<script type='text/javascript'>
  $(document).ready(function() 
    $('#calendar').fullCalendar(
      eventSources: [
        
          url: 'data.php',
          type: 'POST'
        
      ]
    )
  );
</script>

问题

例如,如果我将开始日期选为星期一,将结束日期选为星期五,那么日历会显示从星期一开始到星期四结束的预订,而不是星期五。

我该如何解决这个问题?

【问题讨论】:

我不清楚您如何将日期选择器的日期发布到服务器;也不知道 data.php 到底发生了什么 如果我没记错的话,全天活动总是不包括结束日。 @MatteoTassinari 我删除了$event_array['allDay'] = true;,问题仍然存在。 【参考方案1】:

发生这种情况是因为 events 数组中的 end 是独占的。

另请参阅文档:http://fullcalendar.io/docs/event_data/Event_Object/

活动结束的唯一日期/时间。可选。

Moment-ish 输入,例如 ISO8601 字符串。在整个 API 中 将成为真正的 Moment 对象。

这是事件刚刚结束的那一刻。例如, 如果活动的最后一整天是星期四,则该活动的唯一结束 活动时间为周五00:00:00!

【讨论】:

是否可以在 STR_TO_DATE(:dp2,'%Y-%m-%d') 的同时添加额外的一天? 尝试在几个小时后简单地移动结束日期,也许直接在您的数据库上,看看会发生什么。 我将时间更新为 06:00:00,但日历上仍然不包括星期五。 现在我正在做$stmt = $dbh-&gt;prepare("SELECT id, Forename, Surname, Start, DATE_ADD(End, INTERVAL 1 DAY) AS End, Colour FROM bookings");,但这真的很乱。 这就是它现在的工作方式...end 必须紧跟在事件实际结束之后。

以上是关于DatePicker 和 FullCalendar 总是短一天的主要内容,如果未能解决你的问题,请参考以下文章

如何用bootstrap-datepicker 做日历

Javascript框架日历插件[关闭]

对 Google 和 Exchange (Outlook) 的 FullCalendar 支持

FullCalendar应用——整合农历节气和节日

使用 FullCalendar 和 SlickGrid 时如何选择文本

Fullcalendar-如何删除和显示已完成的任务