1if(typeof STQ === 'undefined') var STQ = {}; 2 3/** 4 * Gestion des format de dates 5 */ 6STQ.dateFormatter = (function(){ 7 8 var HANDLED_LANGUAGES = ['en', 'fr']; 9 10 /** 11 * S'assures que le code de langue est géré par cet outil. 12 * 13 * @param lang_code 14 * @returns string 15 */ 16 function fallbackLanguage(lang_code){ 17 if(HANDLED_LANGUAGES.indexOf(lang_code) == -1){ 18 lang_code = 'fr'; 19 } 20 return lang_code; 21 } 22 23 /** 24 * Retourne le mois dans la bonne langue 25 * 26 * @param {string} lang_code 27 * @param {Date} date_object 28 * 29 * @returns {string} le mois 30 */ 31 function getMonth(lang_code, date_object){ 32 33 var months = { 34 0: { 35 'fr': 'janvier', 36 'en': 'January' 37 }, 38 1: { 39 'fr': 'février', 40 'en': 'February' 41 }, 42 2: { 43 'fr': 'mars', 44 'en': 'March' 45 }, 46 3: { 47 'fr': 'avril', 48 'en': 'April' 49 }, 50 4: { 51 'fr': 'mai', 52 'en': 'May' 53 }, 54 5: { 55 'fr': 'juin', 56 'en': 'June' 57 }, 58 6: { 59 'fr': 'juillet', 60 'en': 'July' 61 }, 62 7: { 63 'fr': 'août', 64 'en': 'August' 65 }, 66 8: { 67 'fr': 'septembre', 68 'en': 'September' 69 }, 70 9: { 71 'fr': 'octobre', 72 'en': 'October' 73 }, 74 10: { 75 'fr': 'novembre', 76 'en': 'November' 77 }, 78 11: { 79 'fr': 'décembre', 80 'en': 'December' 81 } 82 }; 83 84 return months[date_object.getMonth()][fallbackLanguage(lang_code)]; 85 } 86 87 /** 88 * Retourne le jour de la semaine dans la bonne langue 89 * 90 * @param {string} lang_code code de langue. 91 * @param {Date} date_object objet de date JS 92 * 93 * @returns {string} Jour de la semaine 94 */ 95 function getDay(lang_code, date_object){ 96 var days = { 97 0: { 98 'fr': 'dimanche', 99 'en': 'Sunday' 100 }, 101 1: { 102 'fr': 'lundi', 103 'en': 'Monday' 104 }, 105 2: { 106 'fr': 'mardi', 107 'en': 'Tuesday' 108 }, 109 3: { 110 'fr': 'mercredi', 111 'en': 'Wednesday' 112 }, 113 4: { 114 'fr': 'jeudi', 115 'en': 'Thursday' 116 }, 117 5: { 118 'fr': 'vendredi', 119 'en': 'Friday' 120 }, 121 6: { 122 'fr': 'samedi', 123 'en': 'Saturday' 124 } 125 }; 126 127 return days[date_object.getDay()][fallbackLanguage(lang_code)]; 128 129 } 130 131 /** 132 * Retourne la date avec le mois et le jour de la semaine textuelle dans format propre à la langue 133 * 134 * @param {string} date 135 * @param {bool} show_day 136 * @returns {string} La date dans un format spécifique à la lanngue 137 */ 138 function getFormattedTextualDate(date, show_day){ 139 var lang_code = STQ.language; 140 141 var date_object; 142 if(!(date instanceof Date)){ 143 date_object = dateFromISO(date); 144 }else{ 145 date_object = date; 146 } 147 var month = getMonth(lang_code, date_object); 148 var weekday_part = ''; 149 if(show_day) { 150 var day = getDay(lang_code, date_object); 151 weekday_part = day + ', '; 152 } 153 154 var final_date = ''; 155 156 if(lang_code == 'en'){ 157 final_date = weekday_part + month + ' ' + date_object.getDate() + ', ' + date_object.getFullYear(); 158 }else{ 159 final_date = weekday_part + date_object.getDate() + ' ' + month + ' ' + date_object.getFullYear(); 160 } 161 162 return final_date; 163 } 164 165 /** 166 * Retourne le jour et le mois textuel, sans année, dans le format propre à la langue. 167 * 168 * @param {Date} date 169 * @returns {string} ex. « 17 juillet » (fr) / « July 17 » (en) 170 */ 171 function getFormattedDayMonth(date){ 172 var lang_code = STQ.language;
173 var month = getMonth(lang_code, date); 174 if(lang_code == 'en'){ 175 return month + ' ' + date.getDate(); 176 } 177 return date.getDate() + ' ' + month; 178 } 179 180 /** 181 * Construit l'étiquette d'une nuit d'exploitation reliant deux dates consécutives. 182 * Le mois n'est affiché qu'une seule fois lorsque les deux dates sont dans le même mois. 183 * 184 * @param {Date} startDate journée d'exploitation (ex. le 16) 185 * @param {Date} endDate lendemain (ex. le 17) 186 * @param {string} prefix mot d'introduction traduit (« Nuit du » / « Night from ») 187 * @param {string} sep séparateur traduit (« au » / « to ») 188 * 189 * @returns {string} ex. « Nuit du 16 au 17 juillet » / « Night from July 16 to 17 » 190 */ 191 function getNightLabel(startDate, endDate, prefix, sep){ 192 var lang_code = STQ.language; 193 var same_month = startDate.getFullYear() === endDate.getFullYear() 194 && startDate.getMonth() === endDate.getMonth(); 195 196 var start_fragment; 197 var end_fragment; 198 if(same_month){ 199 if(lang_code == 'en'){ 200 start_fragment = getMonth(lang_code, startDate) + ' ' + startDate.getDate(); 201 end_fragment = '' + endDate.getDate(); 202 }else{ 203 start_fragment = '' + startDate.getDate(); 204 end_fragment = endDate.getDate() + ' ' + getMonth(lang_code, endDate); 205 } 206 }else{ 207 start_fragment = getFormattedDayMonth(startDate); 208 end_fragment = getFormattedDayMonth(endDate); 209 } 210 211 return prefix + ' ' + start_fragment + ' ' + sep + ' ' + end_fragment; 212 } 213 214 /* 215 * Parse ISO format date like 2013-05-06T22:00:00.000Z 216 */ 217 function dateFromISO(iso_date_string) { 218 var parts = iso_date_string.match(/\d+/g); 219 var iso_time = Date.UTC(parts[0], parts[1] - 1, parts[2], parts[3], parts[4], parts[5]); 220 var iso_date = new Date(iso_time); 221 222 return iso_date; 223 } 224 225 /** 226 * Retourne le temps dans format propre à la langue 227 * 228 * @param {int} hours Au format 24h 229 * @param {int} minutes 230 * 231 * @returns {string} Le temps dans un format spécifique à la langue 232 */ 233 function getFormattedTime(hours, minutes){ 234 var lang_code = STQ.language; 235 236 var final_time = ''; 237 238 minutes = parseInt(minutes); 239 var minutes_formatted = minutes.toString(); 240 if(minutes < 10){ 241 minutes_formatted = "0" + minutes_formatted; 242 } 243 244 if(lang_code == 'en'){ 245 var meridiem; 246 if(hours > 11){ 247 if(hours != 12){ 248 hours -= 12; 249 } 250 meridiem = "p.m."; 251 252 }else{ 253 if(hours == 0){ 254 hours = 12; 255 } 256 meridiem = "a.m."; 257 } 258 259 final_time = hours + ':' + minutes_formatted + ' ' + meridiem; 260 261 }else{ 262 // Fallback in french 263 final_time = hours + ' h ' + minutes_formatted; 264 } 265 266 return final_time; 267 } 268 269 return { 270 getFormattedTextualDate : getFormattedTextualDate, 271 getFormattedDayMonth : getFormattedDayMonth, 272 getNightLabel : getNightLabel, 273 getFormattedTime : getFormattedTime, 274 dateFromISO : dateFromISO 275 }; 276 277})();
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.