IntlDateFormatter::format

datefmt_format

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

IntlDateFormatter::format -- datefmt_format将日期/时间值格式化为字符串

描述

面向对象风格

public IntlDateFormatter::format(IntlCalendar|DateTimeInterface|array|string|int|float $datetime): string|false

过程化风格

将时间值格式化为字符串。

参数

formatter

日期格式化器资源。

datetime

要格式化的值。这可以是 DateTimeInterface 对象、IntlCalendar 对象、表示自纪元以来的(可能为小数)秒数的 numeric 类型,或 array,格式与 localtime() 的输出相同。

如果传递了 DateTimeIntlCalendar 对象,则不考虑其时区。对象将使用格式化程序配置的时区进行格式化。如果要使用要格式化的对象的时区,则必须在之前使用对象的时区调用 IntlDateFormatter::setTimeZone()。或者,可以使用静态函数 IntlDateFormatter::formatObject()

返回值

格式化的字符串,如果发生错误,则为 false

变更日志

版本 描述
7.1.5 添加了对 datetime 参数提供一般 DateTimeInterface 对象的支持。以前只支持正确的 DateTime 对象。
PECL 3.0.0 添加了对 datetime 参数提供 IntlCalendar 对象的支持。

示例

示例 #1 datefmt_format() 示例

<?php
$fmt
= datefmt_create(
'en_US',
IntlDateFormatter::FULL,
IntlDateFormatter::FULL,
'America/Los_Angeles',
IntlDateFormatter::GREGORIAN
);
echo
'First Formatted output is ' . datefmt_format($fmt, 0);

$fmt = datefmt_create(
'de-DE',
IntlDateFormatter::FULL,
IntlDateFormatter::FULL,
'America/Los_Angeles',
IntlDateFormatter::GREGORIAN
);
echo
'Second Formatted output is ' . datefmt_format($fmt, 0);

$fmt = datefmt_create(
'en_US',
IntlDateFormatter::FULL,
IntlDateFormatter::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::FULL,
IntlDateFormatter::FULL,
'America/Los_Angeles',
IntlDateFormatter::GREGORIAN,
'MM/dd/yyyy'
);
echo
"Second Formatted output with pattern is " . datefmt_format($fmt, 0);
?>

示例 #2 OO 示例

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

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

$fmt = new IntlDateFormatter(
'en_US',
IntlDateFormatter::FULL,
IntlDateFormatter::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::FULL,
IntlDateFormatter::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

示例 #3 使用 IntlCalendar 对象

<?php
$tz
= reset(iterator_to_array(IntlTimeZone::createEnumeration('FR')));
$formatter = IntlDateFormatter::create(
'fr_FR',
IntlDateFormatter::FULL,
IntlDateFormatter::FULL,
$tz,
IntlDateFormatter::GREGORIAN
);

$cal = IntlCalendar::createInstance($tz, '@calendar=islamic-civil');
$cal->set(IntlCalendar::FIELD_MONTH, 8); //9th month, Ramadan
$cal->set(IntlCalendar::FIELD_DAY_OF_MONTH, 1); //1st day
$cal->clear(IntlCalendar::FIELD_HOUR_OF_DAY);
$cal->clear(IntlCalendar::FIELD_MINUTE);
$cal->clear(IntlCalendar::FIELD_SECOND);
$cal->clear(IntlCalendar::FIELD_MILLISECOND);

echo
"In this islamic year, Ramadan started/will start on:\n\t",
$formatter->format($cal), "\n";

//Itʼs the formatterʼs timezone that is used:
$formatter->setTimeZone('Asia/Tokyo');
echo
"After changing timezone:\n\t",
$formatter->format($cal), "\n";

上面的示例将输出

In this islamic year, Ramadan started/will start on:
    mardi 9 juillet 2013 19:00:00 heure avancée d’Europe centrale
After changing timezone:
    mercredi 10 juillet 2013 02:00:00 heure normale du Japon

参见

添加注释

用户贡献的注释 4 notes

mail dot dennisbecker at gmail dot com
11 年前
您应该知道 PHPs IntlDateFormatter 类使用 ISO 日期格式代码,而不是 PHPs date() 格式代码。从我的角度来看,这并不清楚地提到。

可在 http://framework.zend.com/manual/1.12/en/zend.date.constants.html#zend.date.constants.selfdefinedformats 找到 ISO 代码列表,并且应该在这里添加这样的列表。
con at bartrail dot de
12 年前
我希望这能为将来必须在开发和生产平台上处理不同 PHP 版本的人节省一些时间。

使用 *自定义模式* 格式化 DateTime 对象时,请确保使用时间戳传递给 IntlDateFormatter::format,以便它在不同的 PHP 版本上运行。

PHP 版本 5.3.5-1ubuntu7.2(我的开发机器)的示例
<?php
$date
= new \DateTime();

$dateFormatter = \IntlDateFormatter::create(
\Locale::getDefault(),
\IntlDateFormatter::NONE,
\IntlDateFormatter::NONE,
\date_default_timezone_get(),
\IntlDateFormatter::GREGORIAN,
'EEEE'
);

var_dump($dateFormatter->format($date)); // string(6) "Monday"
?>

PHP 版本 5.3.2-1ubuntu4.9(生产服务器)的示例
<?php
// 与上面相同的格式

var_dump($dateFormatter->format($date)); // bool(false)
?>

使用 $dateFormatter->format($date->getTimestamp()) 时,您将始终获得格式化和本地化的字符串,而不是 false。
alex
14 年前
重要的是要注意,将从默认时区 (date_default_timezone_set()) 和您在构造函数(或 datefmt_create())中传递的时区进行时区转换。

如果您将日期插入数据库作为 UTC 时间,请确保也将 date_default_timezone_set 设置为 UTC(或任何其他时区,但它们需要相同)。调用 ::format 后,您将获得转换后的时间。
To Top