Dans PHP, la fonction date_sunset () peut calculer l'heure du coucher du soleil en fonction de la latitude et de la longitude et de la date. Il renvoie un horodatage Unix ou une chaîne de temps formatée. Cependant, cette fonction elle-même ne prend pas directement en charge la sortie multilingue ou les formats temporels internationalisés différents (i18n). Alors, comment faire de Date_sunset () Prise en charge l'affichage multilingue et localisé? Cet article vous amènera à l'implémenter étape par étape.
Tout d'abord, comprenons l'utilisation de base de date_sunset () :
<?php
$timestamp = strtotime('2025-04-26');
$latitude = 37.7749; // Par exemple:San Francisco
$longitude = -122.4194;
$sunset = date_sunset(
$timestamp,
SUNFUNCS_RET_TIMESTAMP,
$latitude,
$longitude,
90,
0
);
echo date('H:i:s', $sunset);
?>
Le code ci-dessus sortira le temps de coucher du soleil, mais le format de temps est fixé et doit être formaté manuellement. Et le lieu n'est pas pris en compte.
Pour atteindre le multilingue et l'internationalisation, nous pouvons combiner la classe IntlDateFormatter de PHP, qui est un outil puissant fourni par l'extension INTL .
Tout d'abord, assurez-vous que votre serveur a l'installation de l'extension INTL . Sinon, vous pouvez vous référer à l'installation ici: https://www.m66.net/php-intl-install-guide
Voici un exemple complet de code amélioré:
<?php
$timestamp = strtotime('2025-04-26');
$latitude = 37.7749; // latitude
$longitude = -122.4194; // longitude
// Obtenez l'horloge du coucher du soleil
$sunset = date_sunset(
$timestamp,
SUNFUNCS_RET_TIMESTAMP,
$latitude,
$longitude,
90,
0
);
// Définir la langue et la région,Par exemple法语法国
$locale = 'fr_FR'; // Peut être changé en 'zh_CN'、'en_US'、'de_DE' attendez
// Définir le fuseau horaire
$timezone = 'Europe/Paris'; // Réglez le fuseau horaire correct au besoin
// Créer un formateur
$formatter = new IntlDateFormatter(
$locale,
IntlDateFormatter::FULL,
IntlDateFormatter::SHORT,
$timezone,
IntlDateFormatter::GREGORIAN
);
// Format Sunset Time
$localizedSunset = $formatter->format($sunset);
echo "Temps de coucher(Localisation): " . $localizedSunset;
?>
Les paramètres contrôlent la langue de sortie, comme le chinois, le français, l'allemand, etc.
Le fuseau horaire contrôle le fuseau horaire de sortie pour assurer l'heure correcte.
IntlDateFormatter peut formater automatiquement les dates en fonction des habitudes linguistiques, telles que de transformer "26 avril 2025" en "26 Avril 2025" (format français).
Si votre site Web permet aux utilisateurs de sélectionner les langues, telles que la transmission des codes de langue à partir des paramètres URL, vous pouvez le faire:
<?php
$locale = isset($_GET['lang']) ? $_GET['lang'] : 'en_US';
$formatter = new IntlDateFormatter(
$locale,
IntlDateFormatter::FULL,
IntlDateFormatter::SHORT,
'UTC',
IntlDateFormatter::GREGORIAN
);
$sunset = date_sunset(
strtotime('2025-04-26'),
SUNFUNCS_RET_TIMESTAMP,
37.7749,
-122.4194,
90,
0
);
echo $formatter->format($sunset);
?>
Si vous visitez: https://www.m66.net/sunset.php?lang=de_de , vous verrez l'heure du coucher du soleil au format allemand.
Si vous souhaitez personnaliser complètement le format de sortie, comme l'affichage des heures et des minutes, vous pouvez spécifier davantage le mode personnalisé:
$formatter = new IntlDateFormatter(
'zh_CN',
IntlDateFormatter::NONE,
IntlDateFormatter::NONE,
'Asia/Shanghai',
IntlDateFormatter::GREGORIAN,
'HH:mm'
);
Ce paramètre publiera un format de temps comme 18:45 , qui est très adapté au mobile ou lorsque vous avez besoin d'une interface simple.
DATE_SUNSET () lui-même ne prend pas en charge multilingue et l'internationalisation, mais peut être utilisé en conjonction avec IntlDateFormatter .
N'oubliez pas de régler correctement les paramètres régionaux et les horaires .
Permettre aux utilisateurs de changer dynamiquement les langages peut améliorer considérablement l'expérience utilisateur.
Tant que vous comprenez cela, des fonctions de date de date similaires (telles que date_sunrise () ) peuvent également être internationalisées de la même manière.