Informations :
Dates
- Publish : : Monday 23 january 2023
- 46 views
Share :
Bonjour, je viens de m’apercevoir qu'en JavaScript les mois, les heures, les minutes et les secondes sont sur qu'un seul chiffre (jusqu'à 9). Et pire, les mois commencent à 0 et finissent à 11.
Pour infos, j'essayais de récupérer/créer le "timestamp" comme en PHP.
J'ai une page sur laquelle est affichée une date à chaque article, et je souhaitais récupérer/créer le timestamp - j'avais 1 mois d'écars ou 50 milles ans de décallage.
Je vous met donc, rapidement ce que j'ai fais :
Script avec 127 lignes
001<script type="text/javascript"> 002/****** 003 * JavaScript 004 * 005 * Convertit une date type datetime (donc qui vient de SQL) 006 * → datetime to timestamp unix 007 * 008 **/ 009function mk_time(date_format_mysql) { 010 011 var year = date_format_mysql.substr(0,4); 012 var month = date_format_mysql.substr(5,2); 013 var month = month - 1; // because in js 12 (december) do not exist (0-11) https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date 014 /* Who has already seen in a calendar 0 for the month of January and 11 for December. Again for the days of the week (weekday) 0-6 ok but for the number of a month its strong... */ 015 var day = date_format_mysql.substr(8,2); 016 var hour = date_format_mysql.substr(11,2); 017 var min = date_format_mysql.substr(14,2); 018 var sec = date_format_mysql.substr(17,2); 019 020/* 021 // Je laisse cette facon.. :/ 022 // si pour quelques raisons le formatage "date_format_mysql" ne serait pas. 023 // exemple : 2023-1-23 3:6:41 024 025 var dateMysqlArray = date_format_mysql.split(" "); 026 var dateFull = dateMysqlArray[0]; 027 var hourFull = dateMysqlArray[1]; 028 029 var dateArray = dateFull.split("-"); 030 var year = dateArray[0]; 031 var month = dateArray[1]; 032 var day = dateArray[2]; 033 034 var hourArray = hourFull.split(":"); 035 var hour = hourArray[0]; 036 var min = hourArray[1]; 037 var sec = hourArray[2]; 038*/ 039// return year+'-'+month+'-'+day+' '+hour+':'+min+':'+sec; 040 041 a = new Date(); 042 043 a.setYear(year); 044 a.setMonth(month); 045 a.setDate(day); 046 a.setHours(hour); 047 a.setMinutes(min); 048 a.setSeconds(sec); 049 050 return a.getTime()/1000; 051 //return Math.floor(a.getTime()/1000); 052 053} 054 055/****** 056 * JavaScript 057 * 058 * Pour l'affichage en date type datetime 059 * → date JS to datetime 060 * 061 **/ 062function date_transform_number(number, type) { 063 if(type == 'month') { 064 /*const months = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];*/ 065 const months = ["01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12"]; 066 nbr = months[number]; 067 } 068 if(type == 'day' || type == 'hour' || type == 'min' || type == 'sec') { 069 nbr = number < 10 ? '0'+number : number; 070 } 071 return nbr; 072} 073 074//-------------------------------------------- 075// just for info current date 076//-------------------------------------------- 077var dateClass = new Date(); 078 079var time = dateClass.getTime(); 080var now = Date.now(); 081 082var year = dateClass.getFullYear(); 083var month = dateClass.getMonth(); 084//var month = date_transform_number(month, 'month'); 085var weekday = dateClass.getDay(); // (0-6) 086var day = dateClass.getDate(); 087//var day = date_transform_number(day, 'day'); 088var hour = dateClass.getHours(); 089//var hour = date_transform_number(hour, 'hour'); 090var min = dateClass.getMinutes(); 091//var min = date_transform_number(min, 'min'); 092var sec = dateClass.getSeconds(); 093//var sec = date_transform_number(sec, 'sec'); 094 095console.log('time: '+time+' → '+typeof time); 096console.log('now: '+now+' → '+typeof now); 097console.log('date: '+year+'-'+month+'-'+day+' '+hour+':'+min+':'+sec); 098 099//-------------------------------------------- 100 101 102//-------------------------------------------- 103// Well... 104//-------------------------------------------- 105console.log('\n'); 106 107var text_content = '2022-12-14 01:00:00'; 108console.log('text_content: '+text_content+' → '+typeof text_content); 109 110// Ma fonction.... il y avait un mois de décalage ;) 111var timestamp_content = mk_time(text_content); 112console.log('timestamp_content: '+timestamp_content+' → '+typeof text_content); 113 114var date_content = new Date(timestamp_content * 1000); 115console.log('date_content: '+date_content+' → '+typeof date_content); 116 117//var timestamp_content_2 = Math.floor(date_content); 118//console.log('timestamp_content_2: '+timestamp_content_2+' → '+typeof timestamp_content_2); 119 120//var timestamp_content_3 = timestamp_content.substr(-4); 121//console.log('timestamp_content_4: '+timestamp_content_3+' → '+typeof timestamp_content_3); // ??? 122 123//var timestamp_content_4 = timestamp_content.split("."); 124//console.log('timestamp_content_3: '+timestamp_content_4[0]+' → '+typeof timestamp_content_4[0]); // ??? 125 126//-------------------------------------------- 127</script>
Cà nous affiche la bonne date dans la console firefox/chrome (F12) sur la ligne "date_content" :
Script avec 8 lignes
001time: 1674442484360 → number 002now: 1674442484360 → number 003date: 2023-0-23 3:54:44 004 005text content: 2022-12-14 01:00:00 → string 006timestamp_content: 1670976000.363 → string 007date_content: Wed Dec 14 2022 01:00:00 GMT+0100 (heure normale d’Europe centrale) → object 008timestamp_content_2: 1670976000363 → number
En PHP :
Script avec 35 lignes
001<?php 002/****** 003 * PHP 004 * 005 * Convertit une date type datetime 006 * → datetime to timestamp unix 007 * 008 **/ 009function mk_time($date_format_mysql) { 010 011 $year = substr($dateTime2mysql,0,4); 012 $month = substr($dateTime2mysql,5,2); 013 $day = substr($dateTime2mysql,8,2); 014 $hour = substr($dateTime2mysql,11,2); 015 $min = substr($dateTime2mysql,14,2); 016 $sec = substr($dateTime2mysql,17,2); 017 018 return mktime($hour, $min, $sec, $month, $day, $year); 019} 020 021$date_text = '2022-12-14 01:00:00'; 022 023$time_php_test = mk_time($date_text); 024$date_php = date('Y-m-d H:i:s', $time_php_test); 025 026// old value sans enlever "-1" du mois d'une date PHP 027$time_js_test = '1673654400'; 028$date_js = date('Y-m-d H:i:s', $time_js_test); 029 030echo 'Date PHP OK : '.$time_php_test.' → '.$date_php.'<br />'; 031echo 'Date PHP NOK : '.$time_js_test.' → '.$date_js.'<br />'; 032 033// Date PHP OK : 1670976000 → 2022-12-14 01:00:00 034// Date PHP NOK : 1673654400 → 2023-01-14 01:00:00 035
Voilà :)
Salutations,
Romain