获取当前日期,给定PHP中的时区?

获取当前日期,给定PHP中的时区?,php,date,timezone,Php,Date,Timezone,我想在PHP中以Paul Eggert格式(America/New_York)获得今天的日期 如果您可以访问PHP5.3,那么它非常适合这样做 以下是手册中的一个示例: $fmt = new IntlDateFormatter( "en_US" ,IntlDateFormatter::FULL, IntlDateFormatter::FULL, 'America/Los_Angeles',IntlDateFormatter::GREGORIAN ); $fmt->format(0

我想在PHP中以Paul Eggert格式(
America/New_York
)获得今天的日期


如果您可以访问PHP5.3,那么它非常适合这样做

以下是手册中的一个示例:

$fmt = new IntlDateFormatter( "en_US" ,IntlDateFormatter::FULL, IntlDateFormatter::FULL,
    'America/Los_Angeles',IntlDateFormatter::GREGORIAN  );
$fmt->format(0); //0 for current time/date
在您的情况下,您可以执行以下操作:

$fmt = new IntlDateFormatter( "en_US" ,IntlDateFormatter::FULL, IntlDateFormatter::FULL,
        'America/New_York');
 $fmt->format($datetime); //where $datetime may be a DateTime object, an integer representing a Unix timestamp value (seconds since epoch, UTC) or an array in the format output by localtime(). 
由于您可以设置时区,例如
美国/纽约
,这比使用GMT或UTC偏移要好得多,因为这还考虑了日光节约周期


最后,由于intl扩展使用ICU数据,在创建您自己的日期/时间格式时,它包含许多非常有用的功能。

首先设置默认时区,然后获取日期,日期将位于您指定的时区:

<?php 
 date_default_timezone_set('America/New_York');
 $date= date('m-d-Y') ;
 ?>


其他答案为系统中的所有日期设置时区。如果您希望为用户支持多个时区,那么这并不总是很好

以下是简短的版本:

<?php
$date = new DateTime("now", new DateTimeZone('America/New_York') );
echo $date->format('Y-m-d H:i:s');
嗯。。。那不是我们想要的。在PHP中修改传统的
DateTime
对象不仅会返回更新的日期,还会修改原始对象

这就是
DateTimeImmutable
的用武之地

$today = new DateTimeImmutable();

echo $today->format('Y-m-d') . "\n<br>";
echo "---\n<br>";

$oneWeekFromToday = $today->add(DateInterval::createFromDateString('7 days'));
$twoWeeksFromToday = $today->add(DateInterval::createFromDateString('14 days'));

echo $today->format('Y-m-d') . "\n<br>";
echo $oneWeekFromToday->format('Y-m-d') . "\n<br>";
echo $twoWeeksFromToday->format('Y-m-d') . "\n<br>";

在第二个示例中,我们得到了预期返回的日期。通过使用
DateTimeImmutable
而不是
DateTime
,我们可以防止意外的状态突变和潜在的错误。

我创建了一些简单的函数,您可以使用它将时间转换为任何时区:

function convertTimeToLocal($datetime,$timezone='Europe/Dublin') {
        $given = new DateTime($datetime, new DateTimeZone("UTC"));
        $given->setTimezone(new DateTimeZone($timezone));
        $output = $given->format("Y-m-d"); //can change as per your requirement
        return $output;
}

请注意,使用
date\u default\u timezone\u set()
会在该点之后对
date()
的所有用法进行设置。有关如何管理多个时区的示例,请参见我的答案。目前,如果您只想在该时区中获得一个日期,请参见下面的DesignerGuy答案,以获得更丰富的解决方案。如果有选择时区的一般方法,将是一件好事。感谢@DesignerGuy的答案,但这里有一个适当的支持时区列表:这应该是公认的答案,这正是我想要的。谢谢有时评论会有帮助:)你应该明确地接受或将你的问题的标题改为“设置默认时区”…@Axel Done,我不再是PHP开发人员了,但我希望它能有所帮助。干得好!我认为这是正确的决定。。。
<?php

// Date for a specific date/time:
$date = new DateTime('Thu, 31 Mar 2011 02:05:59 GMT');

// Output date (as-is)
echo $date->format('l, F j Y g:i:s A');     

// Output line break (for testing)
echo "\n<br />\n";

// Example user timezone (to show it can be used dynamically)
$usersTimezone = 'America/New_York';

// Convert timezone
$tz = new DateTimeZone($usersTimezone);
$date->setTimeZone($tz);

// Output date after 
echo $date->format('l, F j Y g:i:s A');
<?php

// Create a datetime (now, in this case 2017-Feb-11)
$today = new DateTime();

echo $today->format('Y-m-d') . "\n<br>";
echo "---\n<br>";

$oneWeekFromToday = $today->add(DateInterval::createFromDateString('7 days'));
$twoWeeksFromToday = $today->add(DateInterval::createFromDateString('14 days'));

echo $today->format('Y-m-d') . "\n<br>";
echo $oneWeekFromToday->format('Y-m-d') . "\n<br>";
echo $twoWeeksFromToday->format('Y-m-d') . "\n<br>";
echo "\n<br>";
2017-02-11 
--- 
2017-03-04 
2017-03-04 
2017-03-04
$today = new DateTimeImmutable();

echo $today->format('Y-m-d') . "\n<br>";
echo "---\n<br>";

$oneWeekFromToday = $today->add(DateInterval::createFromDateString('7 days'));
$twoWeeksFromToday = $today->add(DateInterval::createFromDateString('14 days'));

echo $today->format('Y-m-d') . "\n<br>";
echo $oneWeekFromToday->format('Y-m-d') . "\n<br>";
echo $twoWeeksFromToday->format('Y-m-d') . "\n<br>";
2017-02-11 
--- 
2017-02-11 
2017-02-18 
2017-02-25 
function convertTimeToLocal($datetime,$timezone='Europe/Dublin') {
        $given = new DateTime($datetime, new DateTimeZone("UTC"));
        $given->setTimezone(new DateTimeZone($timezone));
        $output = $given->format("Y-m-d"); //can change as per your requirement
        return $output;
}