7
votes

Comment puis-je obtenir l'heure du système local dans PHP?

J'écris un système PHP et j'ai besoin d'obtenir le temps système. Pas l'heure GMT ou le temps spécifique à un fuseau horaire, mais le même temps de système utilisé par le système Cron. J'ai un travail cron qui fonctionne tous les jours à minuit et je souhaite montrer sur une page Web Combien de temps cela prendra-t-il avant de se débrouiller.

Par exemple: À l'heure actuelle, il est 18h sur mon horloge système. J'exécute le code: xxx

Le résultat est "3:00" au lieu de "6h00". Si je cours xxx

il retourne 0:00, ce qui est correct. Mais si j'exécute xxx

il retourne 21:00, même si le bon devrait être 18h00.

Merci.


5 commentaires

Permettez-moi d'essayer de clarifier: Si je courais la date ("H: I", Time ()), cela me montrera une fois de 3 heures à partir de maintenant. À cause de cela, strtotime ("demain") - Strtotime ("maintenant") me donne 3 heures de moins que correct. Par exemple, il est maintenant de 18 heures et le cronjob fonctionnera à 12 heures du matin, mais Strtotime ("demain") - strtotime ("maintenant") retourne 3 heures, car "demain" est 00:00 mais "maintenant" est de 21h00.


@JohnwithOrms Pouvez-vous mettre à jour votre message avec ce code s'il vous plaît?


Utilisez heure () au lieu de strtotime ("maintenant")


Utilisation du temps () au lieu de Strtotime ("maintenant") ne fait aucune différence, toujours les mêmes résultats.


Oui, mais le temps () n'a pas à analyser la chaîne "maintenant" et à le reconnaître comme l'heure actuelle


10 Réponses :


4
votes

PHP's TIME retournera le temps système. Vous pouvez le formater avec DATE

Si vous voulez simplement afficher l'heure à l'heure locale du visiteur peut-être que vous feriez mieux d'utiliser un peu JavaScript


6 commentaires

J'ai essayé ceci, date ("H: i", heure ()) renvoie l'heure du GMT, pas l'heure du système local.


Êtes-vous sûr que votre temps de serveur n'est pas défini sur GMT? Vos travaux cron sont-ils exécutés sur le même serveur que vos scripts PHP?


Le résultat de la date ("H: I", TIME ()) L'appel est identique à la fois sur ma machine Windows (avec l'horloge système définie à l'heure locale) et sur une machine Linux (vérifié l'heure avec "TOP", il est la même heure locale que ma machine Windows). Le résultat est le temps (correct) GMT, pas l'heure locale.


Les travaux de cron sont exécutés sur la machine Linux où l'application est réellement déployée. Le temps système est local, mais le code renvoie toujours le temps GMT.


Cependant, la question était de savoir comment obtenir le temps système, celui de la machine et votre réponse ne résout pas cela.


Ceci est incorrect, de même que la plupart des réponses ici. TIME () Donne l'horodatage UNIX, qui est indépendant du fuseau horaire. Mais pour savoir quelle date / l'heure qui représente, vous devez spécifier une TZ. Le formatage avec date () vous montrera une date / heure, mais il utilise le TZ configuré dans php.ini (ou en code PHP) pour le faire. Que PHP TZ n'a aucun rapport avec le système d'exploitation TZ, qui détermine quand un "minuit" Cronjob fonctionne. Je pense @ STIVLO's et @ Justinvincent's Les réponses sont actuellement les seules correctes ici.



0
votes

heure ()

vous donnera l'horodatage actuel du système.

manuel

retourne l'heure actuelle mesurée au nombre de secondes depuis l'époque UNIX (1er janvier 1970 00:00:00 GMT).


1 commentaires

Cependant, le temps () retournera PHP localtime, pas le temps système (machine).



0
votes

Vous pouvez obtenir la date / heure du serveur sur lequel PHP est en cours d'exécution à l'aide du heure () fonction - il retournera un horodatage, qui correspond à la date de date actuelle.

C'est le temps système, sur ce serveur - identique à celui utilisé par cron.


1 commentaires

Le temps () retournera le temps PHP, pas le temps de la machine.



0
votes

Si vous voulez que l'heure GMT, vous souhaiteriez utiliser gmtstrfTime () , qui vous donnera le temps système mais comme dans GMT. Il y a plus d'informations sur http://us2.php.net/gmstrfTime .


1 commentaires

La fonction Time () me donne l'heure du GMT; Je ne veux pas l'heure du GMT, je veux l'heure actuelle du système.



0
votes

Si vous êtes après une date de formatée:

time()


3 commentaires

Je comprends que, le problème est que cet appel de date () me donne l'heure du GMT, soit 3 heures avant la période de mon système.


@JohnWithOndrarms, êtes-vous sûr que votre système de serveur n'est pas défini sur GMT? Date () Sans arguments devrait vous donner l'horodatage actuel du système, aucun délai de trimzone impliqué.


Oui ... je testais sur une machine Windows et le temps sur le plateau est en effet mon heure locale et non GMT. Pensant que cela pourrait être un problème de Windows, j'ai reçu mon code sur un serveur Linux, vérifié l'heure avec "Haut" (c'était correct, heure locale), a dirigé le code et les résultats étaient les mêmes.



6
votes

Il y a beaucoup de réponses, mais il n'y a même pas une correcte au moment de la rédaction.

PHP TIME () La fonction ne renvoie pas l'heure du système, comme la plupart des gens croient, mais Il renvoie le PHP localtime, normalement défini avec date.timezone dans php.ini ou défini avec date_default_timezone_set () dans un script.

par exemple Dans l'un de mes serveurs, PHP Time a été défini sur Europe / Rome et heure système à UTC . J'ai eu une différence d'une heure entre le temps système et le temps PHP.

Je vais vous donner une solution qui fonctionne pour Linux, je ne sais pas pour Windows. Sous Linux, le fuseau horaire système est défini dans / etc / horfezone . Maintenant, ceci est normalement en dehors de mon paramètre Open_BaseDir , mais vous pouvez ajouter : / etc / horfezone sur votre liste pour pouvoir lire le fichier. < P> Ensuite, sur le dessus des scripts, vous souhaitez obtenir le temps système, vous pouvez appeler une fonction de bibliothèque qui définit le fuseau horaire de script sur le fuseau horaire système. Je suppose que cette fonction fait partie d'une classe, alors j'utilise statique: xxx

pour aggraver la matière dans PHP 5.3.3 'etc / uc' n'est pas reconnue, Alors que 'UTC' est, alors j'ai dû ajouter un si pour résoudre ce problème.

MAINTENANT, vous pouvez appeler bonheur temps () et cela vous donnera vraiment le temps système. Je l'ai testé, parce que j'en avais besoin pour moi, c'est pourquoi j'ai trouvé cette question maintenant.


0 commentaires

0
votes

Essayez celui-ci:

$time=date("h:i:s A", strtotime("now"-14));
echo $time;


0 commentaires

0
votes

Pour obtenir l'heure actuelle de votre système, vous devez définir la date correcte date.timezone code> dans votre fichier php.ini. Par exemple, si vous êtes d'Inde, vous écririez:

date.timezone = Europe/Berlin


0 commentaires

2
votes

C'est le moyen le plus facile et le plus infaillible de le faire: xxx

n'essayons pas de l'utiliser avec PHP, obtenons juste le temps réel de SYS;)

(Fonctionnera sur tout système basé sur UNIX)


0 commentaires

0
votes

Vous pouvez l'heure locale actuelle via ci-dessous JavaScript et la définir dans n'importe quelle variable PHP que.

    <script>

        // For 24 hours    

        var ct = new Date();
        var hr = ct.getHours();
        var mt = ct.getMinutes();
        if (mt < 10) {
            mt = "0" + mt;
        }
        document.write("<b>" + hr + ":" + mt + " " + "</b>");    


        // For 12 hours (AM / PM)

        var ct = new Date();
        var hr = ct.getHours();
        var mt = ct.getMinutes();

        var ampm = "AM";

        if (hr >= 12) {
            ampm = "PM";
            hr = hr - 12;
        }
        if (hr == 0) {
            hr = 12;
        }
        if (mt < 10) {
            mt = "0" + mt;
        }

        document.write("<b>" + hr + ":" + mt + " " + ampm + "</b>");

   </script>


0 commentaires