SNS - Web et informatique

SNS - Web et informatique

Mercredi 28 Février 2024  
Votre adresse IP est : 34.236.134.129
Logo

Afficher la date correctement pour toutes les langues avec PHP 8 - Display date correctly for all languages with PHP 8

Publié le .

[EN] It's nice to display a date in a user-friendly format with PHP.
For this I created a class which will allow you to display a date with different formats, short, medium or long and which will be rendered correctly according to the regional modalities you desire.
Especially since the PHP strftime() function is now obsolete in PHP version 8.


[FR] Il est intéressant d'afficher une date dans un format convivial avec PHP.
Pour cela j'ai crée une classe qui vous permettra d'afficher une date avec différents formats, court, moyen ou long et qui sera rendue correctement selon des modalités régionales que vous désirez.
D'autant plus que la fonction strftime() de PHP est désormais obsolète en PHP version 8.





// Make a Class
class tools {

/**
* tools::format_date_locale( $date_Object, $dateType , $timeType, $pattern );
*
* @param {object} $date_Object DateTime object or object accepted
* @param {string} $dateType 'NONE', 'SHORT', 'MEDIUM', 'LONG', 'FULL'
* @param {string} $timeType 'NONE', 'SHORT', 'MEDIUM', 'LONG', 'FULL'
* @param {pattern} $pattern pattern to apply or null 'MMMM y' -> may 2022 or null
* see how to set patterns: https://unicode-org.github.io/icu/userguide/format_parse/datetime/#datetime-format-syntax
* @return {string} date/time formatted locally
*/
public static function format_date_locale( $date_Object, $dateType , $timeType, $pattern ){

// date format
switch ( $dateType ) {

case 'NONE':
$Date_Format = IntlDateFormatter::NONE; // 20220606 08:16 AM
break;
case 'SHORT':
$Date_Format = IntlDateFormatter::SHORT; // 06/06/2022
break;
case 'MEDIUM':
$Date_Format = IntlDateFormatter::MEDIUM; // 6 juin 2022 in [fr] must vary
break;
case 'LONG':
$Date_Format = IntlDateFormatter::LONG; // 6 juin 2022
break;
case 'FULL':
$Date_Format = IntlDateFormatter::FULL; // lundi 6 juin 2022
break;
default:
$Date_Format = IntlDateFormatter::SHORT;

}

// time format
switch ( $timeType ) {

case 'NONE':
$Time_Format = IntlDateFormatter::NONE; // ''
break;
case 'SHORT':
$Time_Format = IntlDateFormatter::SHORT; // 08:11
break;
case 'MEDIUM':
$Time_Format = IntlDateFormatter::MEDIUM; // 08:11:10
break;
case 'LONG':
$Time_Format = IntlDateFormatter::LONG; // 08:09:33 UTC+2
break;
case 'FULL':
$Time_Format = IntlDateFormatter::FULL; // 08:10:38 heure d’été d’Europe centrale
break;
default:
$Time_Format = IntlDateFormatter::SHORT;

}

// create date formatter
$local_date = IntlDateFormatter::create(
LANG_LOCALE, // lang
$Date_Format, // date
$Time_Format, // time
TIMEZONE, // timezone
null, // type of calendar | null -> const IntlDateFormatter::GREGORIAN
$pattern // pattern to apply or null
);

// return date formatted
return $local_date->format( $date_Object );

}
/**
* tools::format_date_locale( $date, $dateType , $timeType, $pattern );
*/

}
// end Class tools


// Samples :
// paste this example into a PHP sandbox with the tools class
// i. Don't forget to include the tools class in your script
// ex.: require_once(__ROOT__.'/tools.php');

// define lang locale
const LANG_LOCALE = "fr";
// define timezone
const TIMEZONE = "Europe/Paris";
// make a dateTime object
$Date = new DateTimeImmutable('1999-12-31', new DateTimeZone(TIMEZONE) );
// well format date
$Date_well_formatted = tools::format_date_locale( $Date, 'FULL' , 'NONE', null );
echo ucwords($Date_well_formatted);
// output :
// Vendredi 31 Décembre 1999

// date and time today
$Date = new DateTimeImmutable('now', new DateTimeZone(TIMEZONE) );
$Date_well_formatted = tools::format_date_locale( $Date, 'FULL' , 'MEDIUM', null );
echo ucwords($Date_well_formatted);
// output :
// Mercredi 6 Décembre 2023 12:31:14

// date and time today with pattern :
$Date = new DateTimeImmutable('now', new DateTimeZone(TIMEZONE) );
$Date_well_formatted = tools::format_date_locale( $Date, 'NONE' , 'NONE', 'EEE d LLL à HH:mm' );
echo ucwords($Date_well_formatted);
// output :
// Mer. 6 Déc. à 12:35

?>

Mots clés : afficher une date en Français en PHP, afficher une date au format international en PHP, afficher la date selon la langue de l’utilisateur avec PHP, remplacer strftime PHP 8, strftime is deprecated, strftime PHP 8, display a date in French in PHP, display a date in international format in PHP, display the date according to the user's language with PHP, replace strftime PHP 8, solve strftime PHP 8, issue, tips PHP