2012-08-15 21 views
5

Używam próbowania tego jQuery datetimepicker, aby uzyskać dane o dacie i godzinie. Jestem w stanie uzyskać większość rzeczy (format, wyświetlacz itp.). Jednak nie byłem w stanie uzyskać daty i czasu w formacie UTC. Jestem w stanie uzyskać tylko datę i godzinę w formacie lokalnym.Jak uzyskać czas utc w jQuery datetimepicker

Czy ktoś wie, jak go zmodyfikować, aby uzyskać datę i godzinę? lub usunąć przycisk "Teraz" w popup?

Odpowiedz

1

Można spróbować to:

żywo Demo:http://jsfiddle.net/Dgnjn/5/

$('#timePicker').datetimepicker({ 
    dateFormat: 'dd-mm-yy', 
    timeFormat: 'hh:mm:ss', 
    stepHour: 2, 
    stepMinute: 10, 
    onSelect: function(dateText, inst) { 
    var dateAsString = dateText; 
    var dateAsObject = $(this).datepicker('getDate'); 
    dateAsObject = $.datepicker.formatDate('mm-dd-yy', new Date(dateAsObject)) 
     alert(dateAsObject); 
    } 
}); 
+1

Dzięki za odpowiedź, ale kod mówi nam tylko, jak sformatować dane wyjściowe. Nie informuje, jak zmienić format czasu z czasu lokalnego na czas UTC. – user1599647

4

wpadłem na tym samym numerze dzisiaj i znalazł ten stary wątek. Możesz zastąpić $ .datepicker._gotoToday, aby użyć czasu UTC po kliknięciu przycisku "teraz".

//make the now button go to "now" in utc, not local 
$.datepicker._gotoToday = function(id) { 
    var inst = this._getInst($(id)[0]), 
     $dp = inst.dpDiv; 
    this._base_gotoToday(id); 
    var tp_inst = this._get(inst, 'timepicker'); 
    //removed -> selectLocalTimeZone(tp_inst); 
    var now = new Date(); 
    var now_utc = new Date(now.getUTCFullYear(), now.getUTCMonth(), now.getUTCDate(), now.getUTCHours(), now.getUTCMinutes(), now.getUTCSeconds()); 
    this._setTime(inst, now_utc); 
    $('.ui-datepicker-today', $dp).click(); 
}; 
+0

Ustawia to tylko czas UTC, data pozostaje lokalna. Więc jeśli twoje locale jest pierwszego dnia miesiąca, a UTC jest na drugim, przycisk "teraz" nadal będzie używał pierwszego jako daty. – Simon

0

bez dodatkowych bibliotekami można użyć metod użytkowych poniżej aby wykonać następujące czynności:

var dateFromPicker = getDateFromPicker(); 
var dateUtc = localAsUtc(dateFromPicker); 
var iso = dateUtc.toISOString(); // returns "2016-12-06T00:00:00.000Z" 
/** 
* <b>WARNING</b>: This method should only be used in conjunction with components that handle local dates (i.e. date pickers). 
* 
* Returns a local date constructed from a UTC date (shifts the time by the local time zone). E.g.: 
* <ul><li>2016-01-01T00:00Z (UTC) -> 2016-01-01T00:00-0100 (CVT) 
*  <li>2016-01-01T00:00Z (UTC) -> 2016-01-01T00:00+0100 (CET) 
* </ul> 
* @param date a date in UTC time zone 
* @returns {Date} the same date & time in the local time zone 
*/ 
function utcAsLocal(date) { 
    if (isNotValidDate(date)) { 
     return null; 
    } 

    return new Date(
     date.getUTCFullYear(), 
     date.getUTCMonth(), 
     date.getUTCDate(), 
     date.getUTCHours(), 
     date.getUTCMinutes(), 
     date.getUTCSeconds(), 
     date.getUTCMilliseconds() 
    ); 
} 

/** 
* <b>WARNING</b>: This method should only be used in conjunction with components that handle local dates (i.e. date pickers). 
* 
* Returns a UTC date constructed from a local date (shifts the time by the local time zone). E.g.: 
* <ul><li>2016-01-01T00:00-0100 (CVT) -> 2016-01-01T00:00Z (UTC) 
*  <li>2016-01-01T00:00+0100 (GMT) -> 2016-01-01T00:00Z (UTC) 
* </ul> 
* @param date a date in UTC time zone 
* @returns {Date} the same date & time in the UTC time zone 
*/ 
function localAsUtc(date) { 
    if (isNotValidDate(date)) { 
     return null; 
    } 

    return new Date(Date.UTC(
     date.getFullYear(), 
     date.getMonth(), 
     date.getDate(), 
     date.getHours(), 
     date.getMinutes(), 
     date.getSeconds(), 
     date.getMilliseconds() 
    )); 
} 

function isValidDate (date) { 
    return !isNotValidDate(date); 
} 

function isNotValidDate(date) { 
    return date == null || isNaN(date.getTime()); 
} 

Oto kilka przykładów, które przed i po UTC symulują stref czasowych:

var date; 
 

 
// simulate a datepicker in (CET) 
 
date = new Date("2016-12-06T00:00:00.000+0100"); 
 
date.toISOString(); // "2016-12-05T23:00:00.000Z" 
 
date = localAsUtc(date); 
 
date.toISOString(); // "2016-12-06T00:00:00.000Z" sent to server 
 

 
// simulate a datepicker in (CVT) 
 
date = new Date("2016-12-06T00:00:00.000-0100"); 
 
date.toISOString(); // "2016-12-06T01:00:00.000Z" 
 
date = localAsUtc(date); 
 
date.toISOString(); // "2016-12-06T00:00:00.000Z" sent to server 
 

 
// setting the datepicker date (CET) 
 
date = new Date("2016-12-06T00:00:00.000Z"); // received from server 
 
date.toISOString(); // "2016-12-06T00:00:00.000Z" 
 
date = utcAsLocal(date); // set datepicker with this date shows (06/12/2016) 
 
date.toISOString(); // "2016-12-05T23:00:00.000Z" 
 

 
// setting the datepicker date (CVT) 
 
date = new Date("2016-12-06T00:00:00.000Z"); // received from server 
 
date.toISOString(); // "2016-12-06T00:00:00.000Z" 
 
date = utcAsLocal(date); // set datepicker with this date shows (06/12/2016) 
 
date.toISOString(); // "2016-12-06T01:00:00.000Z"

, ale odpowiedź nie byłaby kompletna, gdyby nie wspomnieć o moment.js, co znacznie ułatwia obsługę terminów.

Powiązane problemy