PageSourceSearch

https://www.traversiers.com/_assets/26dcebd1710e5fe9e47e5c1f9979e512/js/modules/date_formatter.js?1789147798

js traversiers.com collected 2026-09-24 20:00:28 UTC 7,817 bytes, 277 lines download raw bytes

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 + '&nbsp;h&nbsp;' + 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.