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: p> Le résultat est "3:00" au lieu de "6h00". Si je cours p> il retourne 0:00, ce qui est correct. Mais si j'exécute p> il retourne 21:00, même si le bon devrait être 18h00. P> Merci. P> p>
10 Réponses :
PHP's TIME CODE> retournera le temps système. Vous pouvez le formater avec DATE CODE> P>
Si vous voulez simplement afficher l'heure à l'heure locale du visiteur peut-être que vous feriez mieux d'utiliser un peu JavaScript P>
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 () CODE> 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 () code> vous montrera une date / heure, mais il utilise le TZ configuré dans php.ini code> (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 A > Les réponses sont actuellement les seules correctes ici.
vous donnera l'horodatage actuel du système. P>
manuel fort> p>
retourne l'heure actuelle mesurée au nombre de secondes depuis l'époque UNIX (1er janvier 1970 00:00:00 GMT). p>
blockQuote> heure () code> strong> p>
Cependant, le temps () retournera PHP localtime, pas le temps système (machine).
Vous pouvez obtenir la date / heure du serveur sur lequel PHP est en cours d'exécution à l'aide du heure () Code> fonction - il retournera un horodatage, qui correspond à la date de date actuelle. P>
C'est le temps système, sur ce serveur - identique à celui utilisé par cron. p>
Le temps () retournera le temps PHP, pas le temps de la machine.
Si vous voulez que l'heure GMT, vous souhaiteriez utiliser gmtstrfTime () code>, qui vous donnera le temps système mais comme dans GMT. Il y a plus d'informations sur http://us2.php.net/gmstrfTime . P>
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.
Si vous êtes après une date de formatée:
time()
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.
Il y a beaucoup de réponses, mais il n'y a même pas une correcte au moment de la rédaction.
PHP par exemple Dans l'un de mes serveurs, PHP Time a été défini sur 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 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. P> MAINTENANT, vous pouvez appeler bonheur TIME () CODE> 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 code> dans php.ini ou défini avec date_default_timezone_set () code> dans un script. p> Europe / Rome Code> et heure système à UTC code>. J'ai eu une différence d'une heure entre le temps système et le temps PHP. P> / etc / horfezone code>. Maintenant, ceci est normalement en dehors de mon paramètre Open_BaseDir code>, mais vous pouvez ajouter : / etc / horfezone code> sur votre liste pour pouvoir lire le fichier. P> < 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: p> temps () code> 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. P> p>
Essayez celui-ci:
$time=date("h:i:s A", strtotime("now"-14));
echo $time;
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
C'est le moyen le plus facile et le plus infaillible de le faire: n'essayons pas de l'utiliser avec PHP, obtenons juste le temps réel de SYS;) P> (Fonctionnera sur tout système basé sur UNIX) p> p>
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>
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 () code> au lieu destrtotime ("maintenant") code>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