[英]Fullcalendar wrong time in on click event
我正在使用角度和全日歷。 我有(驚奇的)時區問題,但似乎無法正確解決。
如果在周視圖中單擊08.00小時,則打開一個模態並顯示時間,我看到09.00小時。
timezone: "Europe/Brussels",
ignoreTimezone: false,
這是(atm)+0100時區,夏季是+0200時區
點擊事件:
dayClick: function (date, jsEvent, view) {
$scope.newEventDate = date;
var modalInstance = $modal.open({
templateUrl: 'newRosterEvent',
controller: 'NewEventModalController',
backdrop: "true",
resolve: {
event: function () {
return $scope.newEventDate;
},
stage: function () {
return $scope.stage;
}
}
});
要顯示時間:
stagewebApp.controller('NewEventModalController', ["$scope", "$modalInstance","$filter", "event", "stage", function ($scope, $modalInstance, $filter,event, stage) {
$scope.stage = stage;
$scope.day = new Date($filter('date')(event._d, "yyyy-MM-dd"));
$scope.start = event.toDate();
....more code....
}
在這種情況下,$ scope.start顯示單擊的時間+1
因此,似乎fullcalendar占用了我單擊的時間並將其轉換為所選的時區,但是我希望它可以將單擊的時間解釋為位於我選擇的時區中。
顯然我正在解決這個錯誤,那么正確的方法是什么? ( $scope.start
應該顯示我單擊的時間(最好是在我的時區))。 之后,我將其發送到存儲為UTC的服務器。
FullCalendar的當前版本廣泛使用moment.js 。 您正在描述的問題是由於moment
對象的使用不當造成的。 特別:
$scope.start = event.toDate();
調用toDate
,您將返回一個常規的JavaScript Date
對象-該對象將基於相同的UTC即時,但始終具有運行代碼所在時區的行為。 您有幾種選擇:
您可以將其保留為moment
對象:
$scope.start = event;
您可以將其格式化為保留時區偏移量的ISO字符串:
$scope.start = event.format(); // ex: '2015-03-04T08:00:00+01:00'
無論使用哪個選項,您都需要遵循$scope.start
的用法來期望moment
或字符串,而不是Date
。
另外,在此代碼中:
$scope.day = new Date($filter('date')(event._d, "yyyy-MM-dd"));
永遠不要直接訪問_d
屬性,因為這可能會產生意想不到的副作用。 考慮下划線是指“內部”。 另外,由於矩對象具有格式化功能,因此您在這里不需要Angular的日期過濾器。 相反,只需執行以下操作:
$scope.day = event.format("YYYY-MM-DD");
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.