IntlDateFormatter::create

datefmt_create

IntlDateFormatter::__construct

(PHP 5 >= 5.3.0, PHP 7, PECL intl >= 1.0.0)

IntlDateFormatter::create -- datefmt_create -- IntlDateFormatter::__constructCreate a date formatter

설명

객체 기반 형식

public static IntlDateFormatter IntlDateFormatter::create ( string $locale , int $datetype , int $timetype [, mixed $timezone = NULL [, mixed $calendar = NULL [, string $pattern = "" ]]] )

객체 기반 형식 (constructor)

public IntlDateFormatter::__construct ( string $locale , int $datetype , int $timetype [, mixed $timezone = NULL [, mixed $calendar = NULL [, string $pattern = "" ]]] )

절차식 형식

IntlDateFormatter datefmt_create ( string $locale , int $datetype , int $timetype [, mixed $timezone = NULL [, mixed $calendar = NULL [, string $pattern = "" ]]] )

Create a date formatter.

인수

locale

Locale to use when formatting or parsing or NULL to use the value specified in the ini setting intl.default_locale.

datetype

Date type to use (none, short, medium, long, full). This is one of the IntlDateFormatter constants. It can also be NULL, in which case ICUʼs default date type will be used.

timetype

Time type to use (none, short, medium, long, full). This is one of the IntlDateFormatter constants. It can also be NULL, in which case ICUʼs default time type will be used.

timezone

Time zone ID. The default (and the one used if NULL is given) is the one returned by date_default_timezone_get() or, if applicable, that of the IntlCalendar object passed for the calendar parameter. This ID must be a valid identifier on ICUʼs database or an ID representing an explicit offset, such as GMT-05:30.

This can also be an IntlTimeZone or a DateTimeZone object.

calendar

Calendar to use for formatting or parsing. The default value is NULL, which corresponds to IntlDateFormatter::GREGORIAN. This can either be one of the IntlDateFormatter calendar constants or an IntlCalendar. Any IntlCalendar object passed will be clone; it will not be changed by the IntlDateFormatter. This will determine the calendar type used (gregorian, islamic, persian, etc.) and, if NULL is given for the timezone parameter, also the timezone used.

pattern

Optional pattern to use when formatting or parsing. Possible patterns are documented at » http://userguide.icu-project.org/formatparse/datetime.

반환값

The created IntlDateFormatter or FALSE in case of failure.

변경점

버전 설명
5.5.0/PECL 3.0.0

An IntlCalendar object is allowed for calendar.

Objects of type IntlTimeZone and DateTimeZone are allowed for timezone.

Invalid timezone identifiers (including empty strings) are no longer allowed for timezone.

If NULL is given for timezone, the timezone identifier given by date_default_timezone_get() will be used instead of ICUʼs default.

예제

Example #1 datefmt_create() example

<?php
$fmt 
datefmt_create"en_US" ,IntlDateFormatter::FULLIntlDateFormatter::FULL,
    
'America/Los_Angeles'IntlDateFormatter::GREGORIAN  );
echo 
"First Formatted output is ".datefmt_format$fmt 0);
$fmt datefmt_create"de-DE" ,IntlDateFormatter::FULLIntlDateFormatter::FULL,
    
'America/Los_Angeles',IntlDateFormatter::GREGORIAN  );
echo 
"Second Formatted output is ".datefmt_format$fmt 0);

$fmt datefmt_create"en_US" ,IntlDateFormatter::FULLIntlDateFormatter::FULL,
     
'America/Los_Angeles',IntlDateFormatter::GREGORIAN  ,"MM/dd/yyyy");
echo 
"First Formatted output with pattern is ".datefmt_format$fmt 0);
$fmt datefmt_create"de-DE" ,IntlDateFormatter::FULLIntlDateFormatter::FULL,
     
'America/Los_Angeles',IntlDateFormatter::GREGORIAN  ,"MM/dd/yyyy");
echo 
"Second Formatted output with pattern is ".datefmt_format$fmt 0);
?>

Example #2 OO example

<?php
$fmt 
= new IntlDateFormatter"en_US" ,IntlDateFormatter::FULLIntlDateFormatter::FULL,
    
'America/Los_Angeles',IntlDateFormatter::GREGORIAN  );
echo 
"First Formatted output is ".$fmt->format(0);
$fmt = new IntlDateFormatter"de-DE" ,IntlDateFormatter::FULLIntlDateFormatter::FULL
    
'America/Los_Angeles',IntlDateFormatter::GREGORIAN  );
echo 
"Second Formatted output is ".$fmt->format(0);

$fmt = new IntlDateFormatter"en_US" ,IntlDateFormatter::FULLIntlDateFormatter::FULL
     
'America/Los_Angeles',IntlDateFormatter::GREGORIAN  ,"MM/dd/yyyy");
echo 
"First Formatted output with pattern is ".$fmt->format(0);
$fmt = new IntlDateFormatter"de-DE" ,IntlDateFormatter::FULLIntlDateFormatter::FULL,
      
'America/Los_Angeles',IntlDateFormatter::GREGORIAN "MM/dd/yyyy");
echo 
"Second Formatted output with pattern is ".$fmt->format(0);
?>

위 예제의 출력:

First Formatted output is Wednesday, December 31, 1969 4:00:00 PM PT
Second Formatted output is Mittwoch, 31. Dezember 1969 16:00 Uhr GMT-08:00
First Formatted output with pattern is 12/31/1969
Second Formatted output with pattern is 12/31/1969
         

참고

add a note add a note

User Contributed Notes 5 notes

up
3
daniel dot rhodes at warpasylum dot co dot uk
13 years ago
It should be noted that the locale string passed into IntlDateFormatter's constructor supports UCA keywords. So you can, for example, do things like this to output the year as a Japanese era year:

<?php
$now
= new DateTime();    //DateTime is a core PHP class as of version 5.2.0

$formatter = new IntlDateFormatter('ja_JP', IntlDateFormatter::FULL,
       
IntlDateFormatter::FULL, 'Asia/Tokyo', IntlDateFormatter::GREGORIAN);

echo
'It is now: "' . $formatter->format($now) . '" in Tokyo' . "\n";
//above gives [It is now: "2011年8月19日金曜日 23時32分27秒JST" in Tokyo]

$formatter = new IntlDateFormatter('ja_JP@calendar=japanese', IntlDateFormatter::FULL,
       
IntlDateFormatter::FULL, 'Asia/Tokyo', IntlDateFormatter::TRADITIONAL);

echo
'It is now: "' . $formatter->format($now) . '" in Tokyo' . "\n";
//above gives [It is now: "平成23年8月19日金曜日 23時32分27秒JST" in Tokyo]
?>
up
2
mikko dot rantalainen at peda dot net
12 years ago
Documentation says "timezone: Time zone ID, default is system default."

The "system default" really means only the "TZ" environment variable on Unix/Linux systems. It does not mean PHP ini setting or value set via date_default_timezone_set() or the OS default time zone in file "/etc/timezone".
up
1
info at mobger dot de
1 year ago
The $locale can although contain the information about the calendar

<?php
//...
       
$traditionalFormatter  =  new IntlDateFormatter(
           
$locale.'@calendar='.$calendar,
           
IntlDateFormatter::SHORT,
           
IntlDateFormatter::SHORT,
           
'Europe/Berlin',
           
IntlDateFormatter::TRADITIONAL,
           
'yyyy/MM/dd HH:mm:ss' // ICU-datetime-format
       
);
//..
?>

To get the allowed values for $calendar, use the following code:

<?php
$bundle
=new ResourceBundle('','ICUDATA');
$cnames=[];
$calendars=$bundle->get('calendar');
foreach(
$calendars as $n=>$v){
   
$cnames[]=$n;
}
echo (
print_r($cnames,true));

?>

The result is:
Array
(
    [0] => buddhist
    [1] => chinese
    [2] => coptic
    [3] => dangi
    [4] => default
    [5] => ethiopic
    [6] => ethiopic-amete-alem
    [7] => gregorian
    [8] => hebrew
    [9] => indian
    [10] => islamic
    [11] => islamic-civil
    [12] => japanese
    [13] => persian
    [14] => roc
)
up
1
Anonymous
6 years ago
The documentation says that $datetype and $timetype can also be NULL,  in which case ICUʼs default date type or time type will be used.

But when declare (strict_types=1); is also set, Intl fails to create the IntlDateFormatter class, and it returns an error "datefmt_create: unable to parse input parameters".
up
0
Patanjali
3 years ago
Just to be clear, to use any non-gregorian calendar:

a. The locale must be in the form of locale@calendar=calendar-name

b. The calendar must use the intlDateFormatter::TRADITIONAL constant, or an intlCalendar object created with a locale as specified in a.

The calendar name can be 'gregorian', even if the intlDateFormatter::TRADITIONAL constant is used, which makes for a more generic code approach.
To Top