2013-10-08 15 views
0

C'est ce que j'ai utilisé jusqu'ici jquery. Je ne sais pas pourquoi mon bouton checkRecord n'affichera pas le nombre de jours entre les deux dates. Il me manque manifestement quelque chose.Calcul entre les dates

$(document).ready(function() { 
'use strict';  
var monthNames = [ "January", "February", "March", "April", "May", "June", 
"July", "August", "September", "October", "November", "December" ]; 
var dayNames= ["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"] 

var newDate = new Date(); 
newDate.setDate(newDate.getDate()); 

$('#safetyRecord').hide(); 

$('#today').html(dayNames[newDate.getDay()] + "," +' ' + monthNames[newDate.getMonth()] + ' ' + newDate.getDate() + ","+ ' ' + newDate.getFullYear()); 

$('#checkRecord').click(function(){ 
var $daysSinceLastAccident = $('#daysSinceLastAccident'); 

var dateOfLastAccident = new Date($('#dateOfLastAccident').val()); 

var today = new Date(); 

$daysSinceLastAccident = Math.floor((today.getTime() - dateOfLastAccident.getTime())/(24 * 60 * 60 * 1000)); 

$daysSinceLastAccident.text(daysSinceLastAccident); 
$('#safetyRecord').show(); 
}); 

}); 
+0

Si vous avez déjà corrigé certaines de vos fautes de frappe, n'oubliez pas d'éditer votre message afin que les gens puissent le voir. –

+0

Avez-vous déjà 'console.log' vos valeurs ou utilisez-vous un débogueur pour vous assurer que tout est ce que vous attendez d'elles? La valeur de date est-elle analysée correctement? Si oui, jsfiddle this. –

Répondre

1

Essayez de changer:

var today = new date; et $('#safetyRecord').show;

à

var today = new Date(); et $('#safetyRecord').show();

+0

merci fixe ceux ... Qu'est-ce que je manque ... – user2856563

+0

@ user2856563 Il serait plus facile de vous aider si vous pouvez fournir un JSFiddle. –

+0

http: // jsfiddle.net/kjtzb/3 / – user2856563

0

Dans votre code:

> newDate.setDate(newDate.getDate()); 

ne fait rien, il définit simplement la date de nouveauDate à sa valeur actuelle.

> var $daysSinceLastAccident = $('#daysSinceLastAccident'); 
> [...] 
> $daysSinceLastAccident = Math.floor((today.getTime() - ... 

Au départ $ daysSinceLastAccident est attribué une référence à un objet jQuery, puis un numéro. Quel est le but de la mission initiale?

> $daysSinceLastAccident.text(daysSinceLastAccident); 

Mais vous semblez vous attendre à ce que ce soit toujours un objet jQuery.

aussi:

> var today = new Date(); 

Il existe déjà un newDate variables qui a probablement exactement la même valeur, peut-être 1ms plus tôt, qui a été utilisé pour afficher la date actuelle. Il ne semble pas y avoir de raison de ne pas l'utiliser à nouveau.

Notez que si vous voulez faire la différence entre deux objets de date en jours, vous pouvez définir l'heure à midi aux dates pertinentes, soustraire et diviser par ms/jour, puis arrondir.

au-dessus par exemple:

var newDate = new Date(); 
newDate.setHours(12,0,0,0); // 12:00:00.000 

// You should never leave parsing of date strings to the Date object 
// I'll assume here that it "works" in the limited cases you've tested 
var dateOfLastAccident = new Date($('#dateOfLastAccident').val()); 
dateOfLastAccident.setHours(12,0,0,0); 

var daysSinceLastAccident = Math.round((newDate - dateOfLastAccident)/8.64e7); 

Vous devez analyser manuellement les chaînes de date, il n'est pas difficile. Par exemple. entrée donné comme 09.10.2013 vous pouvez faire:

function parseISODateString(s) { 
    s = s.split(/\D/g); 
    var d = new Date(s[0], --s[1], s[2]); 

    // Return d if s was a valid date string, NaN otherwise. 
    return (d && d.getFullYear() == s[0] && d.getDate() == s[2])? d : NaN; 
} 

Vous devez tester la chaîne d'entrée et valeur retournée pour le rendre robuste.

0

C'est la plus simple fonction pour obtenir la différence date durée en années, mois et jours ... vérifierons ce code

function getDatesDiff(from,to){ 
    from = new Date(from); 
    to = new Date(to); 

    if (isNaN(to - from)) return ""; 

    from.setDate(from.getDate()-1); 
    var fullMonths=0; 
    var days=0; 
    var fromDate=new Date(from); 
    var finalDate=new Date(fromDate); 
    var nextMonth=new Date(new Date(fromDate).setMonth(new Date(fromDate).getMonth() + 1)); 
    var result=''; 

    while(from<=to){ 
     if(+from == +nextMonth){ 
       fullMonths++; 
       finalDate=new Date(nextMonth); 
       nextMonth.setMonth(nextMonth.getMonth() + 1); 
     } 
       from.setDate(from.getDate() + 1); 

    } 


    days=Math.round((to-finalDate)/(1000*60*60*24)); 

     if(Math.round(fullMonths/12)>0) 
     result=Math.round(fullMonths/12) + "year"+(Math.round(fullMonths/12)>1?'s':''); 

     if(parseInt(fullMonths%12)>0) 
     result+=" "+fullMonths%12 + "month"+(parseInt(fullMonths%12)>1?'s':'') ; 

     if(days>0) 
      result+=" "+ days + "day"+(days>1?'s':''); 

    return result; 
} 

c'est jsFiddle .......

https://jsfiddle.net/1rxnmvnd/