2012-08-15 15 views
5

Sto utilizzando il tentativo di questo jQuery datetimepicker per ottenere dati di data e ora. Sono in grado di ottenere la maggior parte delle cose (formato, display, ecc.). Tuttavia, non ero in grado di ottenere la data e l'ora nel formato UTC. Sono solo in grado di ottenere la data e l'ora nel formato locale.Come ottenere tempo utc in jQuery datetimepicker

Qualcuno sa come modificarlo per ottenere la data e l'ora? o rimuovi il pulsante "Adesso" nel popup?

risposta

1

Si può provare questo:

Demo Live: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

Grazie per la risposta, ma il codice ci dice solo come formattare l'output. Non dice come cambiare il formato dell'ora dall'ora locale all'ora UTC. – user1599647

4

Ho incontrato lo stesso problema di oggi, e abbiamo trovato questo vecchio thread. Puoi ignorare $ .datepicker._gotoToday per utilizzare l'ora UTC quando fai clic sul pulsante "adesso".

//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

Questo imposta solo l'ora su UTC, la data rimane locale. Quindi se la tua localizzazione è il 1 ° del mese e UTC è il 2, allora il pulsante 'now' userà ancora il 1 come data. – Simon

0

Senza alcun librerie aggiuntive è possibile utilizzare i metodi di utilità di seguito per effettuare le seguenti operazioni:

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()); 
} 

Ecco alcuni esempi che simulano i fusi orari, prima e dopo UTC:

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"

ma la risposta non sarebbe completa senza menzionare lo moment.js che rende le date di manipolazione molto più semplici.

Problemi correlati