日期格式被插入数据库 + 4 小时
Date format gets inserted in database + 4 hours
我正在使用全日历 (https://fullcalendar.io)。
当我将一个事件从一个时间拖到另一个时间时,时间会改变 + 4 小时。但是当我点击一个日期并添加一个事件时,这不会发生。
这是我的 "eventDrop" 活动:
eventDrop: function(eventDropInfo) {
console.log(eventDropInfo);
$.ajax({
url: 'update.php',
data: 'id='+ eventDropInfo.event.id+'title='+ eventDropInfo.event.title+'&start='+ eventDropInfo.event.start.toISOString()+'&allDay='+ eventDropInfo.event.allDay,
type: "POST",
success: function(json) {
alert('success');
calendar.refetchEvents();
}
});
},
我的Update.php文件如下:
// get database connection
require_once 'api/config/connection.php';
// Check user information
$fusername = $_SESSION['fusername'];
$stmt = $conn->prepare("SELECT * FROM users WHERE fusername=:fusername;");
$stmt->bindParam(':fusername', $fusername);
$stmt->execute();
$user = $stmt->fetch(PDO::FETCH_OBJ);
if(isset($_POST["id"])){
$start_event = $_POST['start'];
$end_event = $_POST['end'];
$id = $_POST['id'];
$allDay = $_POST['allDay'];
// Check user information
$stmt = $conn->prepare("UPDATE events SET start_event=:start_event, end_event=:end_event, allDay=:allDay WHERE id=:id");
$stmt->bindParam(':start_event', $start_event);
$stmt->bindParam(':end_event', $end_event);
$stmt->bindParam(':id', $id);
$stmt->bindParam(':allDay', $allDay);
$stmt->execute();
}
控制台中的event.start显示为:
开始:2019 年 7 月 30 日星期二 08:00:00 GMT-0400(东部夏令时间)
但是当我应用“.toISOString”时,它会转换为“2019-07-30T12:00:00.000Z”并作为 2019-07-30 12:00:00(提前 4 小时)。
我还注意到,当我单击日期单元格添加事件时,使用 console.log 我从事件对象 startStr 和 endStr 中获取如下:
开始:2019 年 8 月 4 日星期日 05:30:00 GMT-0400(东部夏令时)
结束:2019 年 8 月 4 日星期日 06:00:00 GMT-0400(东部夏令时)
startStr: "2019-08-04T05:30:00-04:00"
endStr: "2019-08-04T06:00:00-04:00"
这(上图)正是我希望在将事件放入日期单元格时格式化日期的方式。
但是,当我使用 toISOString 时,我的日期时间将转换为带有 (Z) 的 "T12:00:00.000Z",而不是在末尾添加异地时间。它们如何转换为 "T05:30:00-04:00"?我的意思是,我只需要日期为 XX:XX:XX,并按此输入数据库。
感谢任何帮助!谢谢
toISOString() 使用 UTC-0 并相应地调整日期。
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString
我正在使用全日历 (https://fullcalendar.io)。 当我将一个事件从一个时间拖到另一个时间时,时间会改变 + 4 小时。但是当我点击一个日期并添加一个事件时,这不会发生。
这是我的 "eventDrop" 活动:
eventDrop: function(eventDropInfo) {
console.log(eventDropInfo);
$.ajax({
url: 'update.php',
data: 'id='+ eventDropInfo.event.id+'title='+ eventDropInfo.event.title+'&start='+ eventDropInfo.event.start.toISOString()+'&allDay='+ eventDropInfo.event.allDay,
type: "POST",
success: function(json) {
alert('success');
calendar.refetchEvents();
}
});
},
我的Update.php文件如下:
// get database connection
require_once 'api/config/connection.php';
// Check user information
$fusername = $_SESSION['fusername'];
$stmt = $conn->prepare("SELECT * FROM users WHERE fusername=:fusername;");
$stmt->bindParam(':fusername', $fusername);
$stmt->execute();
$user = $stmt->fetch(PDO::FETCH_OBJ);
if(isset($_POST["id"])){
$start_event = $_POST['start'];
$end_event = $_POST['end'];
$id = $_POST['id'];
$allDay = $_POST['allDay'];
// Check user information
$stmt = $conn->prepare("UPDATE events SET start_event=:start_event, end_event=:end_event, allDay=:allDay WHERE id=:id");
$stmt->bindParam(':start_event', $start_event);
$stmt->bindParam(':end_event', $end_event);
$stmt->bindParam(':id', $id);
$stmt->bindParam(':allDay', $allDay);
$stmt->execute();
}
控制台中的event.start显示为: 开始:2019 年 7 月 30 日星期二 08:00:00 GMT-0400(东部夏令时间)
但是当我应用“.toISOString”时,它会转换为“2019-07-30T12:00:00.000Z”并作为 2019-07-30 12:00:00(提前 4 小时)。
我还注意到,当我单击日期单元格添加事件时,使用 console.log 我从事件对象 startStr 和 endStr 中获取如下:
开始:2019 年 8 月 4 日星期日 05:30:00 GMT-0400(东部夏令时)
结束:2019 年 8 月 4 日星期日 06:00:00 GMT-0400(东部夏令时)
startStr: "2019-08-04T05:30:00-04:00"
endStr: "2019-08-04T06:00:00-04:00"
这(上图)正是我希望在将事件放入日期单元格时格式化日期的方式。
但是,当我使用 toISOString 时,我的日期时间将转换为带有 (Z) 的 "T12:00:00.000Z",而不是在末尾添加异地时间。它们如何转换为 "T05:30:00-04:00"?我的意思是,我只需要日期为 XX:XX:XX,并按此输入数据库。
感谢任何帮助!谢谢
toISOString() 使用 UTC-0 并相应地调整日期。
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString