L'utilisateur saisit une date/heure dans le fuseau horaire courant, mais l'information qui doit être stockée est l'heure UTC (ou GMT).
Voici une fonction de conversion utilisant JQuery et les fonctions de date de Javascript.
function convertDateLocaleToUtc(heure) {
/*
* recuperation de la date (champ separe)
*/
var dateLocale = $("#ma_date").val();
/*
* reformatage de la date
*/
var a_date = dateLocale.split("/");
var a_heure = heure.split(":");
var o_date = new Date(a_date[2],a_date[1],a_date[0], a_heure[0], a_heure[1], a_heure[2]);
var heureGmt = o_date.getUTCHours();
//var minute = o_date.getUTCMinutes();
// var seconde = o_date.getUTCSeconds();
var heureUTC = formatTimeFromNumber(heureGmt) + ":" + a_heure[1] +":" + a_heure[2];
return heureUTC;
}
Cette fonction fait appel à une seconde fonction, pour reformater l'heure sur deux positions :
/**
* Fonction formatant sur deux chiffres les heures/minutes/secondes
*/
function formatTimeFromNumber(valeur) {
var val = valeur.toString();
var retour;
if (val.length == 1) {
retour = "0" + val;
} else {
if (val.length == 2) {
retour = val;
} else {
retour = "00";
}
}
return retour;
}
Voici maintenant l'appel de cette fonction, déclenchée grace à JQuery :
$(document).ready(function() {
$("#heure_locale").change(function() {
$('#heure_utc').val( convertDateLocaleToUtc($(this).val()));
});
});
Et le formulaire correspondant :
<input class="date" id="ma_date" name="ma_date" value="" required>
<input class="timepicker" id="heure_locale" name="heure_locale" required value="">
<input class="timepicker" id="heure_utc" name="heure_utc" value="">