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

ein*_*ein 70 php timezone date

我想America/New_York在PHP 中用Paul Eggert格式()给出一个时区的今天日期?

And*_*ing 160

其他答案设置系统中所有日期的时区.如果您想为用户支持多个时区,这并不总是有效.

这是简短的版本:

<?php
$date = new DateTime("now", new DateTimeZone('America/New_York') );
echo $date->format('Y-m-d H:i:s');
Run Code Online (Sandbox Code Playgroud)

适用于PHP> = 5.2.0

支持的时区列表:php.net/manual/en/timezones.php


这是一个具有现有时间和设置时区的用户设置的版本

<?php

$usersTimezone = 'America/New_York';
$date = new DateTime( 'Thu, 31 Mar 2011 02:05:59 GMT', new DateTimeZone($usersTimezone) );
echo $date->format('Y-m-d H:i:s');
Run Code Online (Sandbox Code Playgroud)

这是一个更详细的版本,可以更清楚地显示该过程

<?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');
Run Code Online (Sandbox Code Playgroud)

图书馆

  • - 一个非常受欢迎的日期库.
  • Chronos - Carbon的直接替代品,专注于不变性.请参阅下文,了解为何重要.
  • jenssegers/date - Carbon的扩展,增加了多语言支持.

我确信有很多其他库可用,但这些是我熟悉的.


奖励课程:不可变日期对象

当你在这里时,让我为你节省一些未来的头痛.假设您想从今天起计算1周,从今天起计算2周.您可能会写一些代码,如:

<?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>";
Run Code Online (Sandbox Code Playgroud)

输出:

2017-02-11 
--- 
2017-03-04 
2017-03-04 
2017-03-04
Run Code Online (Sandbox Code Playgroud)

嗯...那不是我们想要的.DateTime在PHP中修改传统对象不仅会返回更新日期,还会修改原始对象.

这是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>";
Run Code Online (Sandbox Code Playgroud)

输出:

2017-02-11 
--- 
2017-02-11 
2017-02-18 
2017-02-25 
Run Code Online (Sandbox Code Playgroud)

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


Gho*_*Man 52

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

<?php 
 date_default_timezone_set('America/New_York');
 $date= date('m-d-Y') ;
 ?>
Run Code Online (Sandbox Code Playgroud)

http://php.net/manual/en/function.date-default-timezone-set.php

  • 请注意,使用`date_default_timezone_set()`可以在该点之后设置`date()`的所有用法.有关如何管理多个时区的示例,请参阅我的答案. (11认同)
  • 目前不好的做法,如果您只想在该时区获得1个日期,请参阅下面的DesignerGuy答案,以获得更加充实的解决方案. (9认同)

Vip*_* L. 5

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

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;
}
Run Code Online (Sandbox Code Playgroud)