Quelqu'un peut-il suggérer une méthode facile pour convertir la date et l'heure à différents fuseaux horaires en PHP?Conversion de fuseau horaire en php
Répondre
Vous pouvez utiliser l'objet datetime ou leurs alias de fonction pour cela:
Example (abridged from PHP Manual)
date_default_timezone_set('Europe/London');
$datetime = new DateTime('2008-08-03 12:35:23');
echo $datetime->format('Y-m-d H:i:s') . "\n";
$la_time = new DateTimeZone('America/Los_Angeles');
$datetime->setTimezone($la_time);
echo $datetime->format('Y-m-d H:i:s');
Modifier au sujet des commentaires
mais je cannt utiliser cette méthode parce que Je dois montrer la date dans différents fuseaux horaires comme les États-Unis er connexion à partir de différents emplacements
Ce n'est pas un problème. Lorsqu'un utilisateur se connecte, vous déterminez son fuseau horaire et le définissez sur votre objet DateTime, comme indiqué. J'utilise une approche similaire dans l'un de mes projets et cela fonctionne comme un charme.
dans la base de données que je dois obtenir les dates dans un seul fuseau horaire, alors seulement il peut être traité correctement
stocker le temps soit comme un horodatage ou d'un datetime dans un fuseau horaire. Lorsque vous interrogez un champ DateTime, vous convertissez l'heure d'un objet DateTime en ce fuseau horaire ou, si votre base de données le prend en charge, interrogez le fuseau horaire sélectionné.
Une méthode encore plus simple ressemble à ceci:
date_default_timezone_set('Europe/London'); // your user's timezone
$my_datetime='2013-10-23 15:47:10';
echo date('Y-m-d H:i:s',strtotime("$my_datetime UTC"));
Comme décrit in the PHP manual, strtotime() accepte un fuseau horaire aussi, il vous suffit de l'ajouter à votre datetime.
Je vous recommande de stocker toutes vos dates en UTC car vous n'aurez pas de problème avec l'heure d'été.
Cela a fonctionné pour moi et c'est assez propre aussi!
function convert_to_user_date($date, $format = 'n/j/Y g:i A', $userTimeZone = 'America/Los_Angeles', $serverTimeZone = 'UTC')
{
try {
$dateTime = new DateTime ($date, new DateTimeZone($serverTimeZone));
$dateTime->setTimezone(new DateTimeZone($userTimeZone));
return $dateTime->format($format);
} catch (Exception $e) {
return '';
}
}
function convert_to_server_date($date, $format = 'n/j/Y g:i A', $userTimeZone = 'America/Los_Angeles', $serverTimeZone = 'UTC')
{
try {
$dateTime = new DateTime ($date, new DateTimeZone($userTimeZone));
$dateTime->setTimezone(new DateTimeZone($serverTimeZone));
return $dateTime->format($format);
} catch (Exception $e) {
return '';
}
}
//example usage
$serverDate = $userDate = '2014-09-04 22:37:22';
echo convert_to_user_date($serverDate);
echo convert_to_server_date($userDate);
DateTime::setTimezone -- date_timezone_set — Sets the time zone for the DateTime object
objet de style orienté
<?php
$date = new DateTime('2000-01-01', new DateTimeZone('Pacific/Nauru'));
echo $date->format('Y-m-d H:i:sP') . "\n";
$date->setTimezone(new DateTimeZone('Pacific/Chatham'));
echo $date->format('Y-m-d H:i:sP') . "\n";
?>
Style procédural
<?php
$date = date_create('2000-01-01', timezone_open('Pacific/Nauru'));
echo date_format($date, 'Y-m-d H:i:sP') . "\n";
date_timezone_set($date, timezone_open('Pacific/Chatham'));
echo date_format($date, 'Y-m-d H:i:sP') . "\n";
?>
Les exemples ci-dessus va afficher:
2000-01-01 00:00:00+12:00
2000-01-01 01:45:00+13:45
<?php
$time='6:02';
$dt = new DateTime($time, new DateTimeZone('America/New_York'));
//echo $dt->format('Y-m-d H:i:s') . PHP_EOL;
$dt->setTimezone(new DateTimeZone('Asia/Kolkata'));
echo $dt->format('H:i') . PHP_EOL;
?>
// Convertir la date d'une zone à l'autre. /* $ zone_from = 'Asie/Kolkata';
$zone_to='America/Phoenix';
date_default_timezone_set($zone_from);
$convert_date="2016-02-26 10:35:00";
echo $finalDate=zone_conversion_date($convert_date, $zone_from, $zone_to);
*/
function zone_conversion_date($time, $cur_zone, $req_zone)
{
date_default_timezone_set("GMT");
$gmt = date("Y-m-d H:i:s");
date_default_timezone_set($cur_zone);
$local = date("Y-m-d H:i:s");
date_default_timezone_set($req_zone);
$required = date("Y-m-d H:i:s");
/* return $required; */
$diff1 = (strtotime($gmt) - strtotime($local));
$diff2 = (strtotime($required) - strtotime($gmt));
$date = new DateTime($time);
$date->modify("+$diff1 seconds");
$date->modify("+$diff2 seconds");
return $timestamp = $date->format("Y-m-d H:i:s");
}
UTC au niveau local:
<?php
$datetime = date("Y-m-d H:i:s");
$utc = new DateTime($datetime, new DateTimeZone('UTC'));
$utc->setTimezone(new DateTimeZone('America/Sao_Paulo'));
echo $utc->format('Y-m-d H:i:s');
?>
Aucune de ces réponses a fonctionné pour moi (j'ai sauté le code qui était d'essayer trop volumineux en taille). Je pense aussi que c'est bizarre de changer le fuseau horaire par défaut juste pour une seule conversion.
Voici ma solution:
function changeTimeZone($dateString, $timeZoneSource = null, $timeZoneTarget = null)
{
if (empty($timeZoneSource)) {
$timeZoneSource = date_default_timezone_get();
}
if (empty($timeZoneTarget)) {
$timeZoneTarget = date_default_timezone_get();
}
$dt = new DateTime($dateString, new DateTimeZone($timeZoneSource));
$dt->setTimezone(new DateTimeZone($timeZoneTarget));
return $dt->format("Y-m-d H:i:s");
}
Ainsi, pour convertir la valeur par défaut du serveur, vous simplement passer un fuseau horaire:
changeTimeZone("2016-10-24 16:28", "Asia/Tokyo");
Pour convertir la valeur par défaut du serveur à l'utilisateur, vous laisserait le deuxième paramètre nul ou vide:
changeTimeZone("2016-10-24 16:28", "", "Asia/Tokyo");
et de basculer entre les fuseaux horaires unre lated par défaut, vous fournir 2 fuseaux horaires:
changeTimeZone("2016-10-24 16:28", "America/New_York", "Asia/Tokyo");
Cela semble très bien fonctionner! –
Bonne réponse. Je préfère essayer catch au lieu de is (vide) pour éviter toute faute d'orthographe dans la chaîne timezone. try { nouveau DateTimeZone ($ timeZoneSource); } \t catch (Exception $ e) { $ timeZoneSource = date_default_timezone_get(); } –
- 1. JS conversion de fuseau horaire
- 2. Conversion de fuseau horaire Java
- 3. conversion de fuseau horaire en C#
- 4. Conversion de fuseau horaire GMT en java
- 5. Formulaire de conversion de fuseau horaire stringdate
- 6. Ajustement de fuseau horaire PHP
- 7. Conversion d'un champ de colonne "horodatage avec fuseau horaire" en fuseau horaire du serveur
- 8. Modification du fuseau horaire en PHP
- 9. Gestion du fuseau horaire en php
- 10. PHP: Comment convertir un horodatage de serveur en fuseau horaire?
- 11. Migration de fuseau horaire PHP/MySQL
- 12. Fuseau horaire en C#?
- 13. Conversion de décalage de fuseau horaire en nom convivial en PHP
- 14. Conversion du format UTC DateTime en un autre fuseau horaire
- 15. PHP - bizarre décalage de fuseau horaire
- 16. Meilleur liste de fuseau horaire PHP
- 17. Rails Fuseau horaire
- 18. .NET Décalage du fuseau horaire par nom de fuseau horaire
- 19. fuseau horaire de réglage en Python
- 20. Recherche de fuseau horaire
- 21. Erreur de résultat de conversion du fuseau horaire
- 22. requête mysql pour la conversion de fuseau horaire
- 23. Drupal information fuseau horaire
- 24. php Fuseau horaire DateTime pour Columbus Ohio
- 25. Clarification du fuseau horaire PHP/MySQL
- 26. problème de fuseau horaire mysql
- 27. Problèmes de fuseau horaire?
- 28. .NET 2.0 DateTime.ToString() conversion à un fuseau horaire différent
- 29. ruby on rails conversion au fuseau horaire des utilisateurs
- 30. Format fuseau horaire datetime
merci Gordon mais je cannt utiliser cette méthode parce que je dois montrer ce jour dans différents fuseaux horaires que la connexion de l'utilisateur à partir d'emplacements différents – raki
de @raki: si juste après que l'utilisateur est connecté - configurez date_default_timezone_set() avec le fuseau horaire sélectionné par l'utilisateur. – zerkms
ce qui est également impossible .. parce que .. dans la base de données j'ai besoin d'obtenir les dates dans un seul fuseau horaire, alors seulement il peut être traité correctement – raki