Files
shipheart-qt/fonctions_date_heure.js

542 lines
20 KiB
JavaScript
Executable File

.pragma library
.import "fonctions.js" as Fonctions // Permet d'utiliser les fonctions classiques ci-dessous... (cf https://doc.qt.io/qt-5/qtqml-javascript-imports.html )
const LANGUE_FR = 0;
const LANGUE_EN = 1;
const LANGUE_DE = 2;
const LANGUE_ES = 3;
const LANGUE_PT = 4;
const LANGUE_NL = 5;
const LANGUE_IT = 6;
const LANGUE_LV = 7; // Lettonie
const LANGUE_CA = 8; // Catalan
//=====================================================================================
// Fonctions : Renvoit le durée, en secondes, de l'une des périodes d'analyse prédéfinies.
// Reçoit : La période d'analyse (0: 1 heure, 1: 24 heures, 2: 7 jours et 3: 30 jours)
// Retour : La durée, en secondes
//=====================================================================================
function duree_periode_analyse(periode_analyse)
{
var duree;
switch(periode_analyse)
{
default:
case 0 : // 1 heure
duree = (1 * 1 * 60 * 60);
break;
case 1 : // 24 heures
duree = (1 * 24 * 60 * 60);
break;
case 2 : // 7 jours
duree = (7 * 24 * 60 * 60);
break;
case 3 : // 30 jours
duree = (30 * 24 * 60 * 60);
break;
}
return(duree)
}
//=====================================================================================
// Fonctions : Renvoit le nom de l'une des périodes d'analyse prédéfinies.
// Reçoit : La période d'analyse (0: 1 heure, 1: 24 heures, 2: 7 jours et 3: 30 jours)
// Retour : Le texte du nom
//=====================================================================================
function nom_periode_analyse(periode_analyse)
{
var nom;
switch(periode_analyse)
{
default:
case 0 : // 1 heure
nom = qsTr("1 heure");
break;
case 1 : // 24 heures
nom = qsTr("24 heures");
break;
case 2 : // 7 jours
nom = qsTr("7 jours");
break;
case 3 : // 30 jours
nom = qsTr("30 jours");
break;
}
return(nom);
}
//=====================================================================================
// Fonctions : Renvoit da date de début et de fin de l'intervalle en cours d'analyse.
// Reçoit : La période d'analyse (0: 1 heure, 1: 24 heures, 2: 7 jours et 3: 30 jours)
// La date de début et la date de fin en UTC au format JS
// Le fuseau horaire et l'heure d'été en cours
// Retour : La date de début et la date de fin en UTC au format JS mais ajustées à
// la période en cours d'analyse.
//=====================================================================================
function ajustement_periode_analyse(periode_analyse, debut, fin, fuseau, heure_ete)
{
var date_debut, date_fin;
// Passage en heure LOCALE pour effectuer les traitements :
date_debut = date_courante(debut, fuseau, heure_ete); // En LOCALE
date_fin = date_courante(fin, fuseau, heure_ete); // EN LOCALE
// Ajustements à l'intervalle fini d'analyse :
switch(periode_analyse)
{
default:
case 0: // 1 heure
date_debut.setMinutes(Math.trunc(date_debut.getMinutes() / 5) * 5);
date_debut.setSeconds(0);
date_fin.setMinutes(Math.trunc(date_fin.getMinutes() / 5) * 5);
date_fin.setSeconds(0);
break;
case 1: // 24 heures
date_debut.setMinutes(0);
date_debut.setSeconds(0);
date_fin.setMinutes(0);
date_fin.setSeconds(0);
break;
case 2: // 7 jours
date_debut.setHours(Math.trunc(date_debut.getHours() / 6) * 6);
date_debut.setMinutes(0);
date_debut.setSeconds(0);
date_fin.setHours(Math.trunc(date_fin.getHours() / 6) * 6);
date_fin.setMinutes(0);
date_fin.setSeconds(0);
break;
case 3: // 30 jours
date_debut.setHours(0);
date_debut.setMinutes(0);
date_debut.setSeconds(0);
date_fin.setHours(0);
date_fin.setMinutes(0);
date_fin.setSeconds(0);
break;
}
return {
debut: date_utc(date_debut, fuseau, heure_ete), // Retour en UTC
fin: date_utc(date_fin, fuseau, heure_ete) // Retour en UTC
}
}
//=====================================================================================
// Fonctions : Génère une chaine de la forme "hh:mm" en heure locale à partir des
// heures et minutes UTC reçues en paramètre
// Reçoit : Valeur de heures et minutes, fuseau horaire
// Retour : La chaine sur 5 caractères "hh:mm'
//=====================================================================================
function conversion_heure_minutes_locales(hr, mn, fuseau, heure_ete)
{
var retour;
var today = new Date;
var date = new Date(today.getFullYear(), today.getMonth(), today.getDate(), hr, mn, 0);
date = date_add_secondes(date, ((fuseau + heure_ete) * 60 * 60)); // Correction du fuseau horaire pour l'affichage
retour = Fonctions.format_deux_digits(date.getHours(), '0') + ":" + Fonctions.format_deux_digits(date.getMinutes(), '0');
//console.log("Valeur reçue Hr=" + hr + " et min=" + mn + " et chaine de retour =" + retour);
return(retour)
}
//=====================================================================================
// Fonctions : Génère la date du moment ou convertit une date existante en tenant
// compte du fuseau horaire reçu
// Reçoit : La date à convertir au format JS (ou NULL si on veut la date courante), le fuseau, et le décalage heure Eté/Hiver
// Retour : La date dans le fuseau et avec décalage Eté/Hiver, au format JS
//=====================================================================================
function date_courante(dt, fuseau, heure_ete)
{
var date;
if (dt === null)
{
date = new Date;
date = date_add_secondes(date, ((fuseau + heure_ete) * 60 * 60)); // Correction du fuseau horaire pour l'affichage
return(date);
}
else
{
date = date_add_secondes(dt, ((fuseau + heure_ete) * 60 * 60)); // Correction du fuseau horaire pour l'affichage
return(date);
}
}
//=====================================================================================
// Fonctions : Convertit une date existante en UTC
// Reçoit : La date à convertir au format JS, le fuseau, et le décalage heure Eté/Hiver
// Retour : La date UTC, au format JS
//=====================================================================================
function date_utc(dt, fuseau, heure_ete)
{
var date;
if (dt === null) return (null);
date = date_add_secondes(dt, -((fuseau + heure_ete) * 60 * 60)); // Correction du fuseau horaire et de l'heure Ete/Hiver
return(date);
}
//=====================================================================================
// Fonctions : Convertit une valeur d'heure en une chaine dépendant de la langue
// Reçoit : La valeur d'heure, entre 00 et 23, ou 24 (fin de nuit), 25 (aube nautique),
// 26 (aube), 27 (lever du soleil), 28 (zénith), 29 (coucher du soleil),
// 30 (crépuscule), 31 (crépuscule nautique) ou 32 (début de nuit).
// Et la valeur de minutes, entre 00 et 59, ou 60 (aucune minute à retourner)
// Retour : La chaine
//=====================================================================================
function nom_heure(heure, minute)
{
var chaine_h;
var chaine_m;
var texte_heures_speciales = [qsTr("Fin de nuit"), qsTr("Aube nautique"), qsTr("Aube"), qsTr("Lever du soleil"), qsTr("Zénith"), qsTr("Coucher du soleil"), qsTr("Crépuscule"), qsTr("Crépuscule nautique"), qsTr("Début de nuit")];
if ((heure < 0) || (heure > 32)) return("---");
if (heure < 24)
{
chaine_h = qsTr("%1h").arg(((heure<10) ? "0" + heure : "" + heure));
chaine_m = "" + ((minute<10) ? "0" + minute : "" + minute); // On ne renvoit les minutes que si l'on n'est pas sur une heure spéciale.
}
else
{
chaine_h = texte_heures_speciales[heure - 24];
chaine_m = "";
}
return (chaine_h + chaine_m);
}
//=====================================================================================
// Fonctions : Convertit une date au format JS en une chaine au format 'hh:mm:ss'
// Reçoit : La date à convertir
// Retour : La chaine
//=====================================================================================
function chaine_heure(date)
{
var retour;
var heures = date.getHours();
var minutes = date.getMinutes();
var secondes = date.getSeconds();
retour = (heures <= 9) ? "0" + heures : heures;
retour += ":";
retour += (minutes <= 9) ? "0" + minutes : minutes;
retour += ":";
retour += (secondes <= 9) ? "0" + secondes : secondes;
return (retour);
}
//=====================================================================================
// Fonctions : Convertit une date au format JS en une chaine au format 'hh:mm'
// Reçoit : La date à convertir
// Retour : La chaine
//=====================================================================================
function chaine_heure_courte(date)
{
var retour;
var heures = date.getHours();
var minutes = date.getMinutes();
retour = (heures <= 9) ? "0" + heures : heures;
retour += ":";
retour += (minutes <= 9) ? "0" + minutes : minutes;
return (retour);
}
//=====================================================================================
// Fonctions : Convertit une date au format JS en une chaine au format 'dd/MM hh:mm'
// Reçoit : La date à convertir
// Retour : La chaine
//=====================================================================================
function chaine_date_heure_courte(date)
{
var retour;
var mois = date.getMonth() + 1; // Les mois commencent à 0
var jour = date.getDate();
var heures = date.getHours();
var minutes = date.getMinutes();
retour = (jour <= 9) ? "0" + jour : jour;
retour += "/";
retour += (mois <= 9) ? "0" + mois : mois ;
retour += " ";
retour += (heures <= 9) ? "0" + heures : heures;
retour += ":";
retour += (minutes <= 9) ? "0" + minutes : minutes;
return (retour);
}
//=====================================================================================
// Fonctions : Convertit une date au format JS en une chaine au format 'JJ/MM/AAAA'
// Reçoit : La date à convertir
// Retour : La chaine
//=====================================================================================
function chaine_date(date)
{
var retour;
var annee = date.getFullYear();
var mois = date.getMonth() + 1; // Les mois commencent à 0
var jour = date.getDate();
retour = (jour <= 9) ? "0" + jour : jour;
retour += "/";
retour += (mois <= 9) ? "0" + mois : mois ;
retour += "/";
retour += annee;
return (retour);
}
//=====================================================================================
// Fonctions : Convertit un n° de jour (1=lundi, 7=dimanche, 8=tous les jours) en une
// chaine de jour de la semaine dépendant de la langue
// Reçoit : Le n° du jour
// Retour : La chaine
//=====================================================================================
function nom_jour_semaine(no)
{
var textes_jour_semaine = [qsTr("Lundi"), qsTr("Mardi"), qsTr("Mercredi"), qsTr("Jeudi"), qsTr("Vendredi"), qsTr("Samedi"), qsTr("Dimanche"), qsTr("Tous les jours")];
if ((no < 1) || (no > 8)) return("---");
return (textes_jour_semaine[(no - 1)]);
}
//=====================================================================================
// Fonctions : Convertit une date au format JS en une chaine de jour de la seamine dépendant de la langue
// Reçoit : La date
// Retour : La chaine
//=====================================================================================
function chaine_jour_semaine(date)
{
var jour_semaine = date.getDay();
if (jour_semaine === 0) jour_semaine = 7;
return (nom_jour_semaine(jour_semaine));
}
//=====================================================================================
// Fonctions : Convertit une date au format JS en une chaine au format 'JJ/MM/AAAA'
// ou sa version correspondante au pays
// Reçoit : La date à convertir, le code langue (de 1 à N - Cf 'fonctions_localisation.js')
// Retour : La chaine
//=====================================================================================
function chaine_date_longue(date, langue)
{
var retour = "";
var texte_jour = "";
var annee = date.getFullYear();
var mois = date.getMonth() + 1; // Les mois commencent à 0
var jour = date.getDate();
var jour_semaine = date.getDay();
var textes_mois = [qsTr("janvier"), qsTr("février"), qsTr("mars"), qsTr("avril"), qsTr("mai"), qsTr("juin"), qsTr("juillet"), qsTr("août"), qsTr("septembre"), qsTr("octobre"), qsTr("novembre"), qsTr("décembre")];
switch(langue)
{
//--------------------------------------------------------
default:
// Mise en forme n° du jour :
if (jour === 1) texte_jour = "1<sup>er</sup>";
else if ((jour > 1) && (jour <= 9)) texte_jour = "0" + jour;
else texte_jour = jour;
retour += texte_jour;
retour += ' ';
retour += textes_mois[mois - 1];
retour += ' ';
retour += annee;
break;
//---------------------------------------------------------
case LANGUE_EN:
// Mise en forme n° du jour :
if ((jour === 1) || (jour === 21) || (jour === 31)) texte_jour = jour + "<sup>st</sup>";
else if ((jour === 1) || (jour === 22)) texte_jour = jour + "<sup>nd</sup>";
else if ((jour === 3) || (jour === 23)) texte_jour = jour + "<sup>rd</sup>";
else texte_jour = jour + "th";
retour += texte_jour;
retour += ' ';
retour += textes_mois[mois - 1];
retour += ' ';
retour += annee;
break;
//---------------------------------------------------------
case LANGUE_DE:
// Mise en forme n° du jour :
texte_jour = jour + ".";
retour += texte_jour;
retour += ' ';
retour += textes_mois[mois - 1];
retour += ' ';
retour += annee;
break;
}
return (retour);
}
//=====================================================================================
// Fonctions : Convertit une date au format JS en une chaine au format 'YYY-MM-dd hh:mm:ss'
// Reçoit : La date à convertir
// Retour : La chaine
//=====================================================================================
function chaine_date_heure_bdd(date)
{
var retour;
var annee = date.getFullYear();
var mois = date.getMonth() + 1; // Les mois commencent à 0
var jour = date.getDate();
var heures = date.getHours();
var minutes = date.getMinutes();
var secondes = date.getSeconds();
retour = annee;
retour += "-";
retour += (mois <= 9) ? "0" + mois : mois;
retour += "-";
retour += (jour <= 9) ? "0" + jour : jour;
retour += " ";
retour += (heures <= 9) ? "0" + heures : heures;
retour += ":";
retour += (minutes <= 9) ? "0" + minutes : minutes;
retour += ":";
retour += (secondes <= 9) ? "0" + secondes : secondes;
return (retour);
}
//=====================================================================================
// Fonctions : Convertit la date au format JS reçue en une chaine au format 'YYMMdd_hhmmss'
// Reçoit : La date au format JS à convertir
// Retour : La chaine
//=====================================================================================
function chaine_date_heure_fichier(date)
{
var retour;
var annee = date.getYear(); // Sur 2 digits
var mois = date.getMonth() + 1; // Les mois commencent à 0
var jour = date.getDate();
var heures = date.getHours();
var minutes = date.getMinutes();
var secondes = date.getSeconds();
retour = annee;
retour += (mois <= 9) ? "0" + mois : mois;
retour += (jour <= 9) ? "0" + jour : jour;
retour += "_";
retour += (heures <= 9) ? "0" + heures : heures;
retour += (minutes <= 9) ? "0" + minutes : minutes;
retour += (secondes <= 9) ? "0" + secondes : secondes;
return (retour);
}
//=====================================================================================
// Fonctions : Convertit une chaine provenant de la BDD ('YYY-MM-ddThh:mm:ss.000') en
// une date au format JS
// Reçoit : La chaine à convertir
// Retour : La date
//=====================================================================================
function chaine_bdd_date_heure(chaine_date)
{
var t, result = null;
if (typeof chaine_date === 'string')
{
t = chaine_date.split(/[-:.T ]/); // On coupe la chaine initiale en recherchant les '-', ':', '.', ' ' et 'T'
// console.log(t[0] + "/" + t[1] + "/" + t[2] + "//" + t[3] + "/" + t[4] + "/" + t[5]);
result = new Date(t[0], t[1] - 1, t[2], t[3] || 0, t[4] || 0, t[5] || 0); //when t[3], t[4] and t[5] are missing they defaults to zero
}
else console.log("Le type reçu dans la fonction 'chaine_bdd_date_heure' n'est pas correct");
return result;
}
//=====================================================================================
// Fonctions : Ajoute une quantité de secondes à une date. Si le nombre de secondes est
// négatif, il s'agit d'une soustraction...
// Reçoit : La date à convertir et le nombre de secondes à ajouter
// Retour : La nouvelle date
//=====================================================================================
function date_add_secondes(date, secondes)
{
var date_retour = new Date();
date_retour.setTime(date.getTime() + (secondes *1000));
return(date_retour);
}
//=====================================================================================
// Fonctions : Convertir une valeur en ms en une chaine de durée (jour-heures-minutes-secondes)
// Reçoit : Le nombre à convertir
// Retour : La chaine de durée
//=====================================================================================
function chaine_duree(duree)
{
var x;
duree = Math.abs(duree); // Si la valeur est négative, on prend la valeur absolue (évite les erreurs...)
var secondes = Math.trunc(duree / 1000); // Passage de ms en s
var minutes = Math.trunc(secondes/60);
var heures = Math.trunc(minutes/60);
var jours = Math.trunc(heures/24);
secondes = secondes % 60;
minutes = minutes % 60;
heures = heures % 24;
if (jours !== 0) return(qsTr(jours + " jours," + heures + " heures"));
else if (heures !== 0) return(qsTr(heures + " heures, " + minutes + " mins"));
else if (minutes !== 0) return(qsTr(minutes + " mins, " + secondes + " secs"));
else if (secondes !== 0) return(qsTr(secondes + " secondes"));
else return("---")
}