在javascript中设置UTC日期

时间:2015-10-27 20:09:18

标签: javascript date datetime

我正在使用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格式。

0 个答案:

没有答案