Question

Je sais qu'il ya eu beaucoup de sujets comme ça, mais je dois tout problème que je ne pouvais pas trouver la réponse. Mon script est:

window.onload = function(){
    // 200 seconds countdown
    var countdown = 14400; 
    //current timestamp
    var now   = Date.parse(new Date());

    //ready should be stored in your cookie
    if ( !document.cookie )
    {
        document.cookie = Date.parse(new Date (now + countdown  * 1000)); // * 1000 to get ms
    }

    //every 1000 ms
    setInterval(function()
    {
        var diff = ( document.cookie - Date.parse(new Date()) );

        if ( diff > 0 )
        {
            var message = diff/1000 + " seconds left";
        }
        else
        {
            var message = "finished";
        }

        document.body.innerHTML = message;

    },1000);
}

Je veux faire un compte à rebours qui indique le temps de l'utilisateur combien gauche en fonction de sa valeur du cookie. Jusqu'à présent, je réussi à la différence de calcul entre deux valeurs, mais je ne sais pas comment faire le format comme, disons, « jj / mm / aa hh: mm: ss » de l'horodatage de différence (diff). Est-il possible?

Était-ce utile?

La solution

Qu'est-ce que vous voulez est une fonction qui convertit la différence dans (mili) secondes à quelque chose comme

5d 4h 3m 2s

Si vous ne me dérange pas d'avoir un grand nombre de jours pour les périodes> fois quelques mois, vous pouvez utiliser quelque chose comme ceci:

function human_time_difference(diff) {
    var s = diff % 60; diff = Math.floor(diff / 60);
    var min = diff % 60; diff = Math.floor(diff / 60);
    var hr = diff % 24; diff = Math.floor(diff / 24);
    var days = diff;

    return days + 'd ' + hr + 'h ' + min + 'm ' + s + 's';
}

Si vous avez la différence miliseconds, vous aurez besoin de passer le ce nombre divisé par 1000. Vous pouvez également utiliser Math.round pour se débarrasser des fractions, mais vous pouvez tout aussi bien les laisser si vous voulez que informations affichées.

Obtenir des mois et des années est un peu plus délicat pour deux raisons:

  1. Le nombre de jours dans un mois varie.
  2. Lorsque vous allez à partir du milieu d'un mois au milieu de la suivante, l'intervalle de temps ne couvre pas tous les mois entiers, même si le nombre de jours> 31 (par exemple, combien de mois sont là entre le 2ème Juin et le 30 Juillet ??).

Si vous voulez vraiment le nombre de mois entre deux fois, le nombre de secondes entre eux ne suffit pas. Vous devez utiliser la logique de calendrier, qui nécessite le passage dans le début et la date de fin + temps.

PS: Lorsque vous postez une question, éviter les détails non pertinents. Par exemple, votre question n'a rien à voir avec les cookies, setInterval ou gestionnaires onload. La seule partie que vous ne savez pas comment convertir (mili) secondes à jour, heure, etc. Il peut être utile de fournir quelques informations sur la raison pour laquelle vous essayez de faire quelque chose, mais s'il est essentiel de ne pas comprendre la question fondamentale, le mettre à la fin afin que les gens ne doivent pas patauger à travers elle avant d'arriver à l'essentiel. Le même conseil s'applique à votre titre; assurez-vous qu'il est pertinent en excluant les détails non pertinents (par exemple, les cookies et le compte à rebours).

Autres conseils

JavaScript n'a pas construit dans la date de mise en forme des méthodes comme vous pouvez vous attendre si vous avez fait tout PHP. Au lieu de cela, vous devez construire la chaîne manuellement. Cependant, il y a un certain nombre de méthodes de lecture qui seront utiles à cette fin. Voir 10 façons de temps format et la date à l'aide JavaScript.

En outre, si vous le savez. Date.parse ne retourne pas la partie milliseconde de l'horodatage (arrondit vers le bas). Si vous avez besoin des millisecondes, vous pouvez faire une des opérations suivantes

var d = new Date();
var timestamp_ms = Date.parse(d) + d.getMilliseconds();

ou tout simplement

var timestamp_ms = +d;
  1. Je ne comprends pas pourquoi vous vérifiez le cookie par if ( !document.cookie ) Mais il doesnot travail sur mon navigateur, donc je l'ai modifié dans if ( document.cookie )

  2. Essayez la fonction toString et d'autres. Regardez-les en javascript référence d'objet Date. Par exemple,

            var t = new Date;
        t.setTime(diff);
        var message = t.toTimeString() + " seconds left";
    

imprimera 11:59:58 seconds left sur mon navigateur.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top