Je crée une application qui vous permet de définir des événements avec un intervalle de temps. Je veux remplir automatiquement la date de fin lorsque l'utilisateur sélectionne ou modifie la date de début. Cependant, je n'arrive pas à comprendre comment obtenir la différence entre les deux temps, et comment créer une nouvelle date de fin en utilisant cette différence.Comment obtenir la différence entre deux dates en JavaScript?
Répondre
En JavaScript, les dates peuvent être transformées en nombre de millisecondes depuis l'epoc en appelant la méthode getTime()
ou en utilisant simplement la date dans une expression numérique. Pour obtenir la différence, il suffit de soustraire les deux dates.
Pour créer une nouvelle date basée sur la différence, il suffit de transmettre le nombre de millisecondes dans le constructeur.
var oldBegin = ...
var oldEnd = ...
var newBegin = ...
var newEnd = new Date(newBegin + oldEnd - oldBegin);
Cela devrait fonctionner
EDIT: Correction d'un bug pointé par @bdukes
EDIT:
Pour une explication du comportement, oldBegin
, oldEnd
et newBegin
sont Date
instances. Les opérateurs d'appel +
et -
déclencheront le cast automatique Javascript et appelleront automatiquement la méthode prototype valueOf()
de ces objets. Il arrive que la méthode valueOf()
est implémentée dans l'objet Date
en tant qu'appel à getTime()
.
Donc, en gros: date.getTime() === date.valueOf() === (0 + date) === (+date)
Pas assez de réponse. Comment appliquer 'getTime()'? – Gruber
Avez-vous essayé date.getTime()? –
Quel est le format requis pour que .getTime() fonctionne ... Par exemple - new Date ('22 -12-2012 00:00 '). GetTime() ne fonctionne pas ... Des idées? – Jimmyt1988
Si vous utilisez des objets Date, puis utilisez la fonction getTime()
pour les deux dates, il vous donnera leurs temps respectifs depuis le 1er janvier 1970 à une valeur numérique. Vous pouvez ensuite faire la différence entre ces chiffres.
Si cela ne vous aide pas, consultez la documentation complète: http://www.w3schools.com/jsref/jsref_obj_date.asp
Je ne pense pas que le référencement à w3schools.com est trop bon: http://w3fools.com/ –
Oh, oui, n'a pas remarqué, les réponses ci-dessous sont au plus un an et demi . –
Si vous ne se soucient pas de la composante de temps, vous pouvez utiliser .getDate()
et .setDate()
juste régler la partie date.
Donc, pour régler votre date de fin à 2 semaines après la date de début, faire quelque chose comme ceci:
function GetEndDate(startDate)
{
var endDate = new Date(startDate.getTime());
endDate.setDate(endDate.getDate()+14);
return endDate;
}
Pour retourner la différence (en jours) entre deux dates, faites ceci:
function GetDateDiff(startDate, endDate)
{
return endDate.getDate() - startDate.getDate();
}
Enfin, modifions la première fonction de sorte qu'il peut prendre la valeur retournée par 2 comme paramètre:
function GetEndDate(startDate, days)
{
var endDate = new Date(startDate.getTime());
endDate.setDate(endDate.getDate() + days);
return endDate;
}
Remerciez s @Vincent Robert, j'ai fini par utiliser votre exemple de base, mais il est en réalité newBegin + oldEnd - oldBegin
.Voici la solution finale simplifiée:
// don't update end date if there's already an end date but not an old start date
if (!oldEnd || oldBegin) {
var selectedDateSpan = 1800000; // 30 minutes
if (oldEnd) {
selectedDateSpan = oldEnd - oldBegin;
}
newEnd = new Date(newBegin.getTime() + selectedDateSpan));
}
Il est bon d'expliquer pourquoi vous utilisez parfois 'getTime' et parfois pas – Dan
function checkdate() {
var indate = new Date()
indate.setDate(dat)
indate.setMonth(mon - 1)
indate.setFullYear(year)
var one_day = 1000 * 60 * 60 * 24
var diff = Math.ceil((indate.getTime() - now.getTime())/(one_day))
var str = diff + " days are remaining.."
document.getElementById('print').innerHTML = str.fontcolor('blue')
}
ce code remplit la durée des années d'étude lorsque vous entrez la date de début et de fin (qualifier la date accumulés par) d'étude et de vérifier si la durée de moins d'un an si oui l'alerte un message prendre à l'esprit il y a trois éléments d'entrée de la première et la deuxième txtFromQualifDate
txtQualifDate
et troisième txtStudyYears
il montrera résultat de plusieurs années avec la fraction
function getStudyYears()
{
if(document.getElementById('txtFromQualifDate').value != '' && document.getElementById('txtQualifDate').value != '')
{
var d1 = document.getElementById('txtFromQualifDate').value;
var d2 = document.getElementById('txtQualifDate').value;
var one_day=1000*60*60*24;
var x = d1.split("/");
var y = d2.split("/");
var date1=new Date(x[2],(x[1]-1),x[0]);
var date2=new Date(y[2],(y[1]-1),y[0])
var dDays = (date2.getTime()-date1.getTime())/one_day;
if(dDays < 365)
{
alert("the date between start study and graduate must not be less than a year !");
document.getElementById('txtQualifDate').value = "";
document.getElementById('txtStudyYears').value = "";
return ;
}
var dMonths = Math.ceil(dDays/30);
var dYears = Math.floor(dMonths /12) + "." + dMonths % 12;
document.getElementById('txtStudyYears').value = dYears;
}
}
Jamais jamais analyser les chaînes de date pour trouver l'année parce que l'apparence des chaînes (en particulier les séparateurs) diffère entre les navigateurs. Utilisez 'getFullYear' qui a été conçu pour cela. ------- Voir la bibliothèque datejs sur googlecode qui supporte éventuellement la plupart des cas d'angle – Dan
merci pour les conseils @Dan mais ça a fonctionné et testé pour moi sur le vrai projet goverment (différents navigateurs) est-ce que la programmation est faible? :) – shareef
En fonction de vos besoins, cette fonction calcule la différence entre les 2 jours et renvoie un résultat en jours décimaux.
// This one returns a signed decimal. The sign indicates past or future.
this.getDateDiff = function(date1, date2) {
return (date1.getTime() - date2.getTime())/(1000 * 60 * 60 * 24);
}
// This one always returns a positive decimal. (Suggested by Koen below)
this.getDateDiff = function(date1, date2) {
return Math.abs((date1.getTime() - date2.getTime())/(1000 * 60 * 60 * 24));
}
Placez-le dans un appel 'Math.abs()', et vous obtiendrez toujours un nombre décimal positif. –
Belle suggestion Koen. Cela donne aux gens 2 options: juste la vraie date diff comme vous l'avez suggéré, ou un datediff avec le signe indiquant si la différence est dans le passé ou dans le futur. :) – Spider
S'il vous plaît noter qu'en JavaScript, vous pouvez également ajouter/soustraire un nombre en millisecondes à 'date.getTime()' pour obtenir l'heure dans le futur/passé. 'var nextMinute = new Date (someDate.getTime() + 60 * 1000); – Dan
JavaScript supporte parfaitement la différence de date de la boîte
var msMinute = 60*1000,
msDay = 60*60*24*1000,
a = new Date(2012, 2, 12, 23, 59, 59),
b = new Date("2013 march 12");
console.log(Math.floor((b - a)/msDay) + ' full days between');
console.log(Math.floor(((b - a) % msDay)/msMinute) + ' full minutes between');
maintenant quelques pièges. Essayez ceci:
console.log(a - 10);
console.log(a + 10);
Donc, si vous avez le risque d'ajouter un numéro et la date, date à convertir number
directement.
console.log(a.getTime() - 10);
console.log(a.getTime() + 10);
Mon exemple poing démontre la puissance de l'objet Date, mais il semble effectivement être une bombe à retardement
Dan, j'ai trouvé votre exemple le plus facile à comprendre et à suivre. Merci. – Melanie
Les "pièges" sont en fait des valeurs par défaut basées sur la spécification du langage. L'opérateur de soustraction '-' contraint les arguments à nombre, de sorte que la date renvoie sa valeur d'heure. L'opérateur '+ 'est surchargé, donc peut-être addition, coercition au nombre ou concaténation. Puisque les dates coercent à Chaîne dans ce cas, '+' fait la concaténation. La confusion n'est pas la faute de l'objet Date, mais de la surcharge des opérateurs. – RobG
function compare()
{
var end_actual_time = $('#date3').val();
start_actual_time = new Date();
end_actual_time = new Date(end_actual_time);
var diff = end_actual_time-start_actual_time;
var diffSeconds = diff/1000;
var HH = Math.floor(diffSeconds/3600);
var MM = Math.floor(diffSeconds%3600)/60;
var formatted = ((HH < 10)?("0" + HH):HH) + ":" + ((MM < 10)?("0" + MM):MM)
getTime(diffSeconds);
}
function getTime(seconds) {
var days = Math.floor(leftover/86400);
//how many seconds are left
leftover = leftover - (days * 86400);
//how many full hours fits in the amount of leftover seconds
var hours = Math.floor(leftover/3600);
//how many seconds are left
leftover = leftover - (hours * 3600);
//how many minutes fits in the amount of leftover seconds
var minutes = leftover/60;
//how many seconds are left
//leftover = leftover - (minutes * 60);
alert(days + ':' + hours + ':' + minutes);
}
var date1 = new Date();
var date2 = new Date("2015/07/30 21:59:00");
showDiff();
function showDiff(date1, date2){
var diff = (date2 - date1)/1000;
var diff = Math.abs(Math.floor(diff));
var days = Math.floor(diff/(24*60*60));
var leftSec = diff - days * 24*60*60;
var hrs = Math.floor(leftSec/(60*60));
var leftSec = leftSec - hrs * 60*60;
var min = Math.floor(leftSec/(60));
var leftSec = leftSec - min * 60;
document.getElementById("showTime").innerHTML = "You have " + days + " days " + hrs + " hours " + min + " minutes and " + leftSec + " seconds before death.";
setTimeout(showDiff,1000);
}
pour votre code HTML:
<div id="showTime"></div>
modificitaion alternatif code étendu ..
showDiff();
function showDiff(){
var date1 = new Date("2013/01/18 06:59:00");
var date2 = new Date();
//Customise date2 for your required future time
var diff = (date2 - date1)/1000;
var diff = Math.abs(Math.floor(diff));
var years = Math.floor(diff/(365*24*60*60));
var leftSec = diff - years * 365*24*60*60;
var month = Math.floor(leftSec/((365/12)*24*60*60));
var leftSec = leftSec - month * (365/12)*24*60*60;
var days = Math.floor(leftSec/(24*60*60));
var leftSec = leftSec - days * 24*60*60;
var hrs = Math.floor(leftSec/(60*60));
var leftSec = leftSec - hrs * 60*60;
var min = Math.floor(leftSec/(60));
var leftSec = leftSec - min * 60;
document.getElementById("showTime").innerHTML = "You have " + years + " years "+ month + " month " + days + " days " + hrs + " hours " + min + " minutes and " + leftSec + " seconds the life time has passed.";
setTimeout(showDiff,1000);
}
Veuillez ajouter des précisions à votre réponse et utilisez un meilleur anglais. –
Cette solution est fausse parce que vous utilisez 365 jours, en négligeant les années bissextiles. –
<html>
<head>
<script>
function dayDiff()
{
var start = document.getElementById("datepicker").value;
var end= document.getElementById("date_picker").value;
var oneDay = 24*60*60*1000;
var firstDate = new Date(start);
var secondDate = new Date(end);
var diffDays = Math.round(Math.abs((firstDate.getTime() - secondDate.getTime())/(oneDay)));
document.getElementById("leave").value =diffDays ;
}
</script>
</head>
<body>
<input type="text" name="datepicker"value=""/>
<input type="text" name="date_picker" onclick="function dayDiff()" value=""/>
<input type="text" name="leave" value=""/>
</body>
</html>
Si vous utilisez moment.js, il y a une solution simple, qui vous donnera la différence de jours en une seule ligne de code.
moment(endDate).diff(moment(beginDate), 'days');
Des détails supplémentaires sont disponibles dans le moment.js page
Cheers, Miguel
- 1. Comment afficher la différence entre deux dates comme 00Y 00M
- 2. Comment obtenir la différence entre deux listes de noms R?
- 3. Différence entre deux DateTimes C#?
- 4. Comment trouver la différence entre deux chaînes?
- 5. Comment obtenir les différences entre deux dates dans Oracle qui étaient dans la même colonne?
- 6. Pour faire une différence entre 2 dates
- 7. Sélection d'enregistrements entre deux dates dans deux colonnes
- 8. Dans Oracle, existe-t-il une fonction qui calcule la différence entre deux dates?
- 9. différence entre functionName() et functionName.call() en javascript
- 10. Quelle est la différence entre « et" en JavaScript?
- 11. Date de comparaison entre deux dates?
- 12. nombre de périodes (personnalisées) entre deux dates
- 13. Oracle - Meilleure instruction SELECT pour obtenir la différence en minutes entre deux colonnes DateTime?
- 14. Calcul de la différence des dates en Java
- 15. calcul de la semaine MySQL entre deux dates
- 16. Oracle - différence ou changements entre deux lignes de deux tables
- 17. Différence entre deux déclarations de DLL
- 18. Obtenir la valeur entre deux sous-chaînes en utilisant regex
- 19. Quelle est la meilleure pratique pour obtenir un DateTime aléatoire entre deux dates-heures?
- 20. différence de pourcentage entre deux fichiers texte
- 21. Différence entre les objets JSON en utilisant Javascript/JQuery
- 22. Trouver la différence entre le contenu de deux fichiers
- 23. Quelle est la différence entre ces deux chaînes?
- 24. SQL pour trouver la différence entre deux lignes
- 25. Quelle est la différence entre ces deux exemples de code?
- 26. Algorithme pour trouver la différence entre deux tableaux
- 27. différence de temps entre deux fois dans la même table
- 28. Trouver la différence situé entre deux dictionnaires complexes
- 29. Quelle est la différence entre ces deux déclarations?
- 30. Quelle est la différence entre ces deux ancres HTML?
double possible de [comparer deux dates avec JavaScript] (https://stackoverflow.com/questions/492994/compare -deux-dates-avec-javascript) –