2009-11-24 5 views
75

Comment vérifier le décalage horaire entre deux zones de texte en Javascript?Vérifiez le décalage horaire en Javascript

+2

Quel format est l'utilisateur entre dans la fois? –

+2

S'agit-il de deux zones de texte contenant UNIQUEMENT des valeurs d'heure? Tels que "23h42" ou "08h09"? –

+2

oui, comme la même chose que vous avez dit – Kishh

Répondre

136

Improviser. objets Soustraire JavaScript Date pour obtenir leur différence:

// use a constant date (e.g. 2000-01-01) and the desired time to initialize two dates 

var date1 = new Date(2000, 0, 1, 9, 0); // 9:00 AM 
var date2 = new Date(2000, 0, 1, 17, 0); // 5:00 PM 

// the following is to handle cases where the times are on the opposite side of 
// midnight e.g. when you want to get the difference between 9:00 PM and 5:00 AM 

if (date2 < date1) { 
    date2.setDate(date2.getDate() + 1); 
} 

var diff = date2 - date1; 

// 28800000 milliseconds (8 hours) 

Vous pouvez ensuite convertir millisecondes à l'heure, minute et secondes comme ceci:

var msec = diff; 
var hh = Math.floor(msec/1000/60/60); 
msec -= hh * 1000 * 60 * 60; 
var mm = Math.floor(msec/1000/60); 
msec -= mm * 1000 * 60; 
var ss = Math.floor(msec/1000); 
msec -= ss * 1000; 
// diff = 28800000 => hh = 8, mm = 0, ss = 0, msec = 0 

Vous pouvez convertir le temps en tant que chaîne de Format de 24 heures comme celui-ci:

function parseTime(s) { 
    var part = s.match(/(\d+):(\d+)(?:)?(am|pm)?/i); 
    var hh = parseInt(part[1], 10); 
    var mm = parseInt(part[2], 10); 
    var ap = part[3] ? part[3].toUpperCase() : null; 
    if (ap === "AM") { 
     if (hh == 12) { 
      hh = 0; 
     } 
    } 
    if (ap === "PM") { 
     if (hh != 12) { 
      hh += 12; 
     } 
    } 
    return { hh: hh, mm: mm }; 
} 
parseTime("12:00 AM"); // {hh: 0, mm: 0} 
parseTime("12:00 PM"); // {hh: 12, mm: 0} 
parseTime("01:00 PM"); // {hh: 13, mm: 0} 
parseTime("23:00"); // {hh: 23, mm: 0} 
+0

Je ne sais jamais si les dates dans ce format seront analysées en d/m/y ou en m/d/y. Les formats officiels acceptés sont ici (quoi que Date.parse() accepte est valide), https://developer.mozilla.org/fr/JavaScript/Reference/Global_Objects/Date/parse –

+0

quel est le +1 d'ici? Quelle partie de la date est cette incrémentation? –

+0

Je sais que c'est ancien, mais où dans tout ce charabia est-ce que quelque chose se lit à partir des champs de formulaire? Tout ce que je vois est un exemple de code codé en dur. Comment puis-je faire la différence entre le nombre de fois que mon utilisateur a tapé dans mes deux 'input type =" text "' plutôt que entre 9h00 et 17h00? – Martha

5

Une bonne solution est avaliable à

http://blogs.digitss.com/javascript/calculate-datetime-difference-simple-javascript-code-snippet/

donne la sortie dans le format de votre choix differnece de

jours: heures: minutes: secondes.

Une version légèrement modifiée de ce code est illustré ci-dessous

var vdaysdiff; // difference of the dates 
    var vhourDiff; 
    var vmindiff; 
    var vsecdiff; 

    vdaysdiff = Math.floor(diff/1000/60/60/24); // in days 
    diff -= vdaysdiff*1000*60*60*24; 

    vhourDiff = Math.floor(diff/1000/60/60); // in hours 
    diff -= vhourDiff*1000*60*60; 

    vmindiff = Math.floor(diff/1000/60); // in minutes 
    diff -= vmindiff*1000*60; 

    vsecdiff= Math.floor(diff/1000); // in seconds 

    //Text formatting 
    var hourtext = '00'; 
    if (hourDiff > 0){ hourtext = String(hourDiff);} 
    if (hourtext.length == 1){hourtext = '0' + hourtext};                

    var mintext = '00';       
    if (mindiff > 0){ mintext = String(mindiff);} 
    if (mintext.length == 1){mintext = '0' + mintext}; 

    //shows output as HH:MM (i needed shorter duration) 
    duration.value= hourtext + ':' + mintext; 
6

Voici mon interprétation ....

function get_time_difference(earlierDate, laterDate) 
{ 
    var oDiff = new Object(); 

    // Calculate Differences 
    // ------------------------------------------------------------------- // 
    var nTotalDiff = laterDate.getTime() - earlierDate.getTime(); 

    oDiff.days = Math.floor(nTotalDiff/1000/60/60/24); 
    nTotalDiff -= oDiff.days * 1000 * 60 * 60 * 24; 

    oDiff.hours = Math.floor(nTotalDiff/1000/60/60); 
    nTotalDiff -= oDiff.hours * 1000 * 60 * 60; 

    oDiff.minutes = Math.floor(nTotalDiff/1000/60); 
    nTotalDiff -= oDiff.minutes * 1000 * 60; 

    oDiff.seconds = Math.floor(nTotalDiff/1000); 
    // ------------------------------------------------------------------- // 

    // Format Duration 
    // ------------------------------------------------------------------- // 
    // Format Hours 
    var hourtext = '00'; 
    if (oDiff.days > 0){ hourtext = String(oDiff.days);} 
    if (hourtext.length == 1){hourtext = '0' + hourtext}; 

    // Format Minutes 
    var mintext = '00'; 
    if (oDiff.minutes > 0){ mintext = String(oDiff.minutes);} 
    if (mintext.length == 1) { mintext = '0' + mintext }; 

    // Format Seconds 
    var sectext = '00'; 
    if (oDiff.seconds > 0) { sectext = String(oDiff.seconds); } 
    if (sectext.length == 1) { sectext = '0' + sectext }; 

    // Set Duration 
    var sDuration = hourtext + ':' + mintext + ':' + sectext; 
    oDiff.duration = sDuration; 
    // ------------------------------------------------------------------- // 

    return oDiff; 
} 
+1

Remarque: la durée manque le nombre de jours – okigan

+0

hourtext utilise oDiff.days , et les heures ne sont pas utilisées pour calculer la durée – aguaviva

14

Cette fonction retourne une chaîne avec la différence d'une chaîne datetime et le datetime actuel.

function get_time_diff(datetime) 
{ 
    var datetime = typeof datetime !== 'undefined' ? datetime : "2014-01-01 01:02:03.123456"; 

    var datetime = new Date(datetime).getTime(); 
    var now = new Date().getTime(); 

    if(isNaN(datetime)) 
    { 
     return ""; 
    } 

    console.log(datetime + " " + now); 

    if (datetime < now) { 
     var milisec_diff = now - datetime; 
    }else{ 
     var milisec_diff = datetime - now; 
    } 

    var days = Math.floor(milisec_diff/1000/60/(60 * 24)); 

    var date_diff = new Date(milisec_diff); 

    return days + " Days "+ date_diff.getHours() + " Hours " + date_diff.getMinutes() + " Minutes " + date_diff.getSeconds() + " Seconds"; 
} 

Testé dans la (appuyez sur F12) Google Chrome console

get_time_diff() 
1388534523123 1375877555722 
"146 Days 12 Hours 49 Minutes 27 Seconds" 
+0

Comment puis-je obtenir la différence de temps entre la date = "2016/03/01 11:00" à ce jour = "2016/03/06 11:00". et aussi comment formater la date pour la fonction ci-dessus –

+0

http://momentjs.com/ résoudra vos problèmes lorsque vous travaillez avec l'heure et les dates en javascript –

+0

http://momentjs.com/docs/#/displaying/difference/ vous devez calculer la différence entre les objets moment –

2

Lorsque j'ai essayé la différence entre timbre même temps, il a donné 0 Jours 5 Heures 30 Minutes

afin d'obtenir exactement j'ai soustrait 5 heures et 30 min

function get_time_diff(datetime) 
{ 
var datetime = typeof datetime !== 'undefined' ? datetime : "2014-01-01 01:02:03.123456"; 

var datetime = new Date(datetime).getTime(); 
var now = new Date().getTime(); 

if(isNaN(datetime)) 
{ 
    return ""; 
} 

console.log(datetime + " " + now); 

if (datetime < now) { 
    var milisec_diff = now - datetime; 
}else{ 
    var milisec_diff = datetime - now; 
} 

var days = Math.floor(milisec_diff/1000/60/(60 * 24)); 

var date_diff = new Date(milisec_diff); 

return days + "d "+ (date_diff.getHours() - 5) + "h " + (date_diff.getMinutes() - 30) + "m"; 
} 
2

Ceci est une addition à dmd733 La réponse. J'ai corrigé le bug avec la durée du jour (enfin j'espère l'avoir fait, je n'ai pas pu tester tous les cas).

J'ai aussi rapidement ajouté une propriété String au résultat qui contient le temps passé (désolé pour les mauvaises ifs imbriquées !!). Par exemple, si utilisé pour l'interface utilisateur et indiquant quand quelque chose a été mis à jour (comme un flux RSS). Un peu de place, mais agréable à avoir:

function getTimeDiffAndPrettyText(oDatePublished) { 

    var oResult = {}; 

    var oToday = new Date(); 

    var nDiff = oToday.getTime() - oDatePublished.getTime(); 

    // Get diff in days 
    oResult.days = Math.floor(nDiff/1000/60/60/24); 
    nDiff -= oResult.days * 1000 * 60 * 60 * 24; 

    // Get diff in hours 
    oResult.hours = Math.floor(nDiff/1000/60/60); 
    nDiff -= oResult.hours * 1000 * 60 * 60; 

    // Get diff in minutes 
    oResult.minutes = Math.floor(nDiff/1000/60); 
    nDiff -= oResult.minutes * 1000 * 60; 

    // Get diff in seconds 
    oResult.seconds = Math.floor(nDiff/1000); 

    // Render the diffs into friendly duration string 

    // Days 
    var sDays = '00'; 
    if (oResult.days > 0) { 
     sDays = String(oResult.days); 
    } 
    if (sDays.length === 1) { 
     sDays = '0' + sDays; 
    } 

    // Format Hours 
    var sHour = '00'; 
    if (oResult.hours > 0) { 
     sHour = String(oResult.hours); 
    } 
    if (sHour.length === 1) { 
     sHour = '0' + sHour; 
    } 

    // Format Minutes 
    var sMins = '00'; 
    if (oResult.minutes > 0) { 
     sMins = String(oResult.minutes); 
    } 
    if (sMins.length === 1) { 
     sMins = '0' + sMins; 
    } 

    // Format Seconds 
    var sSecs = '00'; 
    if (oResult.seconds > 0) { 
     sSecs = String(oResult.seconds); 
    } 
    if (sSecs.length === 1) { 
     sSecs = '0' + sSecs; 
    } 

    // Set Duration 
    var sDuration = sDays + ':' + sHour + ':' + sMins + ':' + sSecs; 
    oResult.duration = sDuration; 

    // Set friendly text for printing 
    if(oResult.days === 0) { 

     if(oResult.hours === 0) { 

      if(oResult.minutes === 0) { 
       var sSecHolder = oResult.seconds > 1 ? 'Seconds' : 'Second'; 
       oResult.friendlyNiceText = oResult.seconds + ' ' + sSecHolder + ' ago'; 
      } else { 
       var sMinutesHolder = oResult.minutes > 1 ? 'Minutes' : 'Minute'; 
       oResult.friendlyNiceText = oResult.minutes + ' ' + sMinutesHolder + ' ago'; 
      } 

     } else { 
      var sHourHolder = oResult.hours > 1 ? 'Hours' : 'Hour'; 
      oResult.friendlyNiceText = oResult.hours + ' ' + sHourHolder + ' ago'; 
     } 
    } else { 
     var sDayHolder = oResult.days > 1 ? 'Days' : 'Day'; 
     oResult.friendlyNiceText = oResult.days + ' ' + sDayHolder + ' ago'; 
    } 

    return oResult; 
} 
8

est ici la solution qui a fonctionné pour moi:

var date1 = new Date("08/05/2015 23:41:20"); 
var date2 = new Date("08/06/2015 02:56:32"); 

var diff = date2.getTime() - date1.getTime(); 

var msec = diff; 
var hh = Math.floor(msec/1000/60/60); 
msec -= hh * 1000 * 60 * 60; 
var mm = Math.floor(msec/1000/60); 
msec -= mm * 1000 * 60; 
var ss = Math.floor(msec/1000); 
msec -= ss * 1000; 

alert(hh + ":" + mm + ":" + ss); 
0

J'aime faire via Epoch.

var now = new Date(); 
var future = new Date(now.setMinutes(15)); 

var futureEpoch = moment(future).unix(); 
var nowEpoch = moment(now).unix(); 
var differenceInEpoch = nowEpoch - scheduledEpoch ; 

console.log("futureEpoch  : " + futureEpoch); 
console.log("nowEpoch    : " + nowEpoch); 
console.log("differenceInEpoch  : " + differenceInEpoch); 

var diffTime = new Date(0); // The 0 there is the key, which sets the date to the epoch 
diffTime.setUTCSeconds(differenceInEpoch); 
console.log("new diffTime : " + diffTime); 
-1

saisir les valeurs d'entrée après formulaire de soumission

$start_time = $_POST('start_time'); 
 
$end_time =$_POST('end_time'); 
 

 
$start = $start_time; 
 
$end = $end_time; 
 

 
$datetime1 = new DateTime($end); 
 
$datetime2 = new DateTime($start); 
 
//echo $datetime1->format('H:i:s'); 
 
$interval = $datetime1->diff($datetime2); 
 
$elapsed = $interval->format('%h:%i'); 
 
$time = explode(":",$elapsed); 
 
$hours = $time[0]; 
 
$minutes = $time[1]; 
 
$tminutes = $minutes + ($hours*60);

la variable tminutes de $ est diff totale en minutes, heures de travail est $ heure

+0

Votre code ne fonctionne pas. – Mistalis

+0

quelle erreur vous faites face, ça fonctionne bien pour moi! –

+0

L'auteur de la question veut savoir comment le faire en js, donc em i. –

2

Le temps diff dans millisecondes

firstDate.getTime() - secondDate.getTime() 
0

Dans mon cas, je vais stocker l'heure en millisecondes sur le stockage de chrome et essayer de trouver diff en heures plus tard.

function timeDiffInHours(milliseconds){ 
    time_diff = (new Date).getTime() - milliseconds 
    return parseInt((time_diff/(1000*60*60)) % 24) 
} 

// This is again sending current time and diff would be 0. 
timeDiffInHours((new Date).getTime()); 
0

je l'ai fait quelques améliorations pour le compteur de minuterie

//example return : 01:23:02:02 
//    : 1 Day 01:23:02:02 
//    : 2 Days 01:23:02:02 


function get_timeDifference(strtdatetime) { 
    var datetime = new Date(strtdatetime).getTime(); 
    var now = new Date().getTime(); 

    if (isNaN(datetime)) { 
     return ""; 
    } 

    //console.log(datetime + " " + now); 

    if (datetime < now) { 
     var milisec_diff = now - datetime; 
    } else { 
     var milisec_diff = datetime - now; 
    } 

    var days = Math.floor(milisec_diff/1000/60/(60 * 24)); 

    var date_diff = new Date(milisec_diff); 





    var msec = milisec_diff; 
    var hh = Math.floor(msec/1000/60/60); 
    msec -= hh * 1000 * 60 * 60; 
    var mm = Math.floor(msec/1000/60); 
    msec -= mm * 1000 * 60; 
    var ss = Math.floor(msec/1000); 
    msec -= ss * 1000 


    var daylabel = ""; 
    if (days > 0) { 
     var grammar = " "; 
     if (days > 1) grammar = "s " 
     var hrreset = days * 24; 
     hh = hh - hrreset; 
     daylabel = days + " Day" + grammar ; 
    } 


    // Format Hours 
    var hourtext = '00'; 
    hourtext = String(hh); 
    if (hourtext.length == 1) { hourtext = '0' + hourtext }; 

    // Format Minutes 
    var mintext = '00'; 
    mintext = String(mm); 
    if (mintext.length == 1) { mintext = '0' + mintext }; 

    // Format Seconds 
    var sectext = '00'; 
    sectext = String(ss); 
    if (sectext.length == 1) { sectext = '0' + sectext }; 

    var msectext = '00'; 
    msectext = String(msec); 
    msectext = msectext.substring(0, 1); 
    if (msectext.length == 1) { msectext = '0' + msectext }; 

    return daylabel + hourtext + ":" + mintext + ":" + sectext + ":" + msectext; 
} 
0

J'utiliser simplement getTime(); et par exemple Date.now() revenir différence en millisecondes:

//specified date: 

var oneDate = new Date("November 02, 2017 06:00:00"); 

//number of milliseconds since midnight Jan 1 1970 till specified date 

var oneDateMiliseconds = oneDate.getTime(); 

////number of milliseconds since midnight Jan 1 1970 till now 

var currentMiliseconds = Date.now(); 

//return time difference in miliseconds 

alert(currentMiliseconds-oneDateMiliseconds); 
Questions connexes