IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Calcul du nombre de semaines entre deux dates en javascript


Sujet :

JavaScript

  1. #1
    Membre éprouvé Avatar de shaun_the_sheep
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Octobre 2004
    Messages
    1 619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2004
    Messages : 1 619
    Points : 996
    Points
    996
    Par défaut Calcul du nombre de semaines entre deux dates en javascript
    bonjour,

    j'essai à partir de deux champs textes qui devraient contenir des dates de calculer le nombre de semaine qu'il y a entre les deux dates
    mon code javascript:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
     
     var a = $("#proposal_date_from");
     var b = $("#proposal_date_to");
     var combined = a.add(b)
     
           $(combined).change(function()
            {
    			var WEEK = 1000 * 60 * 60 * 24 * 7;
     
                var date1 = new Date($("#proposal_date_from").val());
    			if( !date1 )
    			{$("#proposal_numberWeek").val(0);return;}
     
                var date2 = new Date($("#proposal_date_to").val());
    			if( !date2 )
    			{$("#proposal_numberWeek").val(0);return;}
     
    			if(1==1)
    			{
    				var difference_ms  = Math.abs(date2.getTime() - date1.getTime());
    				var diffWeek = Math.floor(difference_ms  / WEEK); 
     
    				$("#proposal_numberWeek").val(diffWeek);
    			}
    			else
    			{   alert("End date must be greater than beginning date");
    				$("#proposal_numberWeek").val(0);
    			}
            });
    si je teste avec date1 = 01/10/2016 (jj/mm/aaaa) et date2 = 31/10/2016 (jj/mm/aaaa) j'obtient 131 je soupçonne un soucis de format comme si le calcul se faisait sur un format type mm/dd/yyyy.
    et je cherche à comprendre pourquoi ce resultat

    merci à vous pour votre aide

  2. #2
    Membre éprouvé Avatar de shaun_the_sheep
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Octobre 2004
    Messages
    1 619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2004
    Messages : 1 619
    Points : 996
    Points
    996
    Par défaut
    visiblement je dois forcer mon format de date en mm/dd/yyyy pour avoir un calcul correct
    mon code devient
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    //fonction de calcul du nombre de mois entre deux dates
    	   //JavaScript accept "YYYY/MM/DD" or "MM/DD/YYYY"
    	   var a = $("#proposal_date_from");
    	   var b = $("#proposal_date_to");
    	   var combined = a.add(b)
           $(combined).change(function()
            {
    			var WEEK = 1000 * 60 * 60 * 24 * 7;
    			var culture = "@Thread.CurrentThread.CurrentCulture";
    			
    			var datefrom =$("#proposal_date_from").val();
    			var dateto = $("#proposal_date_to").val();			
    			if(culture=='fr') 
    			{datefrom = datefrom.split("/")[2]+"/"+datefrom.split("/")[1]+"/"+datefrom.split("/")[0];
    		     dateto = dateto.split("/")[2]+"/"+dateto.split("/")[1]+"/"+dateto.split("/")[0];
    			}		
    			
    			var date1 = new Date(datefrom);
    			if( isNaN(date1) )
    			{$("#proposal_numberWeek").val(0);return;}
    			
                var date2 = new Date(dateto);
    			if( isNaN(date2) )
    			{$("#proposal_numberWeek").val(0);return;}
    			
    			if(1==1)
    			{
    				var difference_ms  = Math.abs(date2.getTime() - date1.getTime());
    				var diffWeek = Math.floor(difference_ms  / WEEK); 
    
    				$("#proposal_numberWeek").val(diffWeek);
    			}
    			else
    			{   alert("End date must be greater than beginning date");
    				$("#proposal_numberWeek").val(0);
    			}
            });
    reste à trouver une bonne méthode de controle de validité de date en anglais (mm/dd/yyyy) 30/10/2016 est accepté

  3. #3
    Membre éprouvé Avatar de shaun_the_sheep
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Octobre 2004
    Messages
    1 619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2004
    Messages : 1 619
    Points : 996
    Points
    996
    Par défaut
    avec du code trouvé sur le net j'ai mis au point cette fonction

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
     
    	  /**
    	  * isValidDate(str)
    	  * param string str value yyyy-mm-dd
    	  * return boolean true or false
    	  * IF date is valid return true
    	  */
    	   function isValdDate(dateInString)
    	   {	
    	        // STRING FORMAT yyyy-mm-dd
    			if(dateInString=="" || dateInString==null){return false;}								
     
    			// m[1] is year 'YYYY' * m[2] is month 'MM' * m[3] is day 'DD'					
    			var m = dateInString.match(/(\d{4})\/(\d{2})\/(\d{2})/);
     
    			// STR IS NOT FIT m IS NOT OBJECT
    			if( m === null || typeof m !== 'object'){return false;}				
     
    			// CHECK m TYPE
    			if (typeof m !== 'object' && m !== null && m.size!==3){return false;}
     
    			var ret = true; //RETURN VALUE						
    			var thisYear = new Date().getFullYear(); //YEAR NOW
    			var minYear = 1999; //MIN YEAR
     
    			// YEAR CHECK
    			if( (m[1].length < 4) || m[1] < minYear || m[1] > thisYear){ret = false;}
    			// MONTH CHECK			
    			if( (m[2].length < 2) || m[2] < 1 || m[2] > 12){ret = false;}
    			// DAY CHECK
    			if( (m[3].length < 2) || m[3] < 1 ){ret = false;}
    			if( (m[2]=='01' || m[2]=='03' || m[2]=='05' || m[2]=='07' || m[2]=='08' || m[2]=='10' || m[2]=='12')&& m[3] > 31) {ret = false;}
    			if( (m[2]=='04' || m[2]=='06' || m[2]=='09' || m[2]=='11')&& m[3] > 30) {ret = false;}
     
    			if(m[1] % 4 == 0 && m[1] % 100 != 0 || m[1] % 400 == 0)
    			{if( (m[2]=='02')&& m[3] > 29) 
    			 {ret = false;}
    			}
    			else
    			{ if( (m[2]=='02')&& m[3] > 28) 
    			  {ret = false;}
    			}
     
    			return ret;
    	   }
    le test sur une année bissextile ,'est pas terrible mais fonctionne.

  4. #4
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    Février 2009
    Messages
    6 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Points : 22 933
    Points
    22 933
    Billets dans le blog
    125
    Par défaut
    Sous réserve d'introduire un format de date acceptable (voir la documentation), moment.js peut aider :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    /*
     * "http://momentjs.com/"
     * "https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.14.1/moment.min.js"
     */
     
    let
      date1 = moment( "2016-04-27" ),
      date2 = moment( "2016-09-05" ),
      date1Week = date1.week(),
      date2Week = date2.week(),
      deltaWeek = Math.abs( date1Week - date2Week );
     
    console.log( date1.format( "YYYY-MM-DDTHH:mm:ss.SSSZZ" ), date1Week );
    console.log( date2.format( "YYYY-MM-DDTHH:mm:ss.SSSZZ" ), date2Week );
    console.log( deltaWeek );
     
    /*
     * 2016-04-27T00:00:00.000+0200 18
     * 2016-09-05T00:00:00.000+0200 37
     * 19
     */

    Blog

    Sans l'analyse et la conception, la programmation est l'art d'ajouter des bogues à un fichier texte vide.
    (Louis Srygley : Without requirements or design, programming is the art of adding bugs to an empty text file.)

  5. #5
    Membre éprouvé Avatar de shaun_the_sheep
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Octobre 2004
    Messages
    1 619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2004
    Messages : 1 619
    Points : 996
    Points
    996
    Par défaut
    bonjour

    j'ai effectivement vu une référence ou deux sur cette librairie
    à étudier mais pour un prochain projet

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2007] Calculer le nombre de mois entre deux dates?
    Par EmmanuelleC dans le forum Excel
    Réponses: 11
    Dernier message: 08/06/2010, 04h11
  2. [VxiR2] Calcul du nombre de jours entre deux dates
    Par PATRICIA02 dans le forum Webi
    Réponses: 4
    Dernier message: 23/07/2009, 12h43
  3. calcule du nombre de jours entre deux date
    Par chalcol dans le forum Oracle
    Réponses: 3
    Dernier message: 23/03/2009, 16h36
  4. [SQL] Calcul du nombre de mois entre deux dates
    Par Lolie11 dans le forum Langage SQL
    Réponses: 7
    Dernier message: 09/03/2009, 11h46
  5. [SQL] calcul du nombre d'heure entre deux dates
    Par ahmedbj dans le forum Requêtes
    Réponses: 2
    Dernier message: 02/03/2009, 12h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo