我正在使用fullcalendar创建轮换计划。我需要创建以UTC格式存储的开始和结束日期的事件。无论我如何创建日期,日期都会以时区存储。日期也必须存储在数据库中。我目前在数据库中拥有的测试数据没有时区并且显示正确。 用户使用日期选择器选择开始日期和结束日期,但我在日期选择器的文本框中添加时间,具体取决于用户选择的旋转类型。因此,初始开始和结束日期来自文本字段。这些日期的格式如下:
start: 10/30/2015 12:00 AM
end: 11/19/2015 11:59 PM
我需要以UTC格式创建一个Date对象。
var startDate = convertTextToDate($('#schedule_start_date').val());
var endDate = convertTextToDate($('#schedule_end_date').val());
这是convertTextToDate
函数:
function convertTextToDate(dateValue)
{
var dateArray = dateValue.split(/\D/);
var pm = /pm$/i.test(dateValue);
var hour = (+dateArray[3] || 0) % 12 + (pm ? 12 : 0);
var date = new Date(Date.UTC(dateArray[2], dateArray[0] - 1, dateArray[1], hour, +dateArray[4] || 0, +dateArray[5] || 0));
return date;
}
当我在return date;
行设置断点时,日期值始终会显示时区。创建和显示事件时,时间将按时区量关闭。事件是使用while loop
创建的。所以我必须为每次轮换增加7天。它会创建预期的事件数,但开始和结束日期都会关闭,因为我相信,因为它不是UTC时间。
这是创建事件的功能:
$("#rotation_schedule_btn").click(function () {
//create member list order
var memberList = [];
$("#rotationList li").each(function () {
memberList.push({
id: $(this).attr('id'),
name: $(this).text(),
color: $(this).css('background-color')
})
});
var startDate = convertTextToDate($('#schedule_start_date').val());
var endDate = convertTextToDate($('#schedule_end_date').val());
//remove events between startDate & endDate
$('#edit_calendar').fullCalendar('removeEvents', function (event) {
if (event.start.toDate() >= startDate && event.start.toDate() <= endDate
|| event.end.toDate() >= startDate && event.end.toDate() <= endDate) {
return true;
}
});
//Create events from rotation schedule selected
var newEvents = [];
var rotation_length = $('#rotation_type_select option:selected').val();
var rotation_start_date = new Date(startDate.toUTCString());
var rotation_end_date = new Date(startDate.toUTCString());
//End date is to midnight
endDate.setMinutes(endDate.getMinutes() + 1);
rotation_end_date.setDate(rotation_end_date.getDate() + parseInt(rotation_length));
var member_index = 0;
while (rotation_end_date <= endDate)
{
var event = new Object();
event = {
title: memberList[member_index].name,
start: new Date(rotation_start_date.toUTCString()),
end: new Date(rotation_end_date.toUTCString()),
objectID: memberList[member_index].id,
color: memberList[member_index].color,
allDay: true,
textColor: 'white'
};
newEvents.push(event);
eventsAdded.push(event);
rotation_start_date.setDate(rotation_start_date.getDate() + parseInt(rotation_length));
rotation_end_date.setDate(rotation_end_date.getDate() + parseInt(rotation_length));
if ((memberList.length - 1) == member_index) {
member_index = 0;
}
else {
member_index++;
}
}
//Render events on calendar
$('#edit_calendar').fullCalendar('addEventSource', newEvents);
});
我需要使用否时区,UTC格式创建一个Date对象。无论我做什么,日期对象都会关闭4小时,这是UTC和我的时区之间的时差。
我知道我可以用UTC格式显示它,但这不是我需要的。我需要操纵日期对象来创建事件,它们必须是UTC格式。