datetime-php中的时区转换

谁能建议一种简单的方法将日期和时间转换为php中的不同时区?

8个解决方案

108 votes

您可以为此使用datetime对象或其函数别名:

示例(摘自PHP手册)

date_default_timezone_set('Europe/London');

$datetime = new DateTime('2008-08-03 12:35:23');

echo $datetime->format('Y-m-d H:i:s') . "\n";

$la_time = new DateTimeZone('America/Los_Angeles');

$datetime->setTimezone($la_time);

echo $datetime->format('Y-m-d H:i:s');

编辑评论

但我无法使用此方法,因为当用户从不同位置登录时,我需要在不同时区显示日期

那不是问题。 用户登录后,您将确定其时区并将其设置为DateTime对象,如图所示。 我在我的一个项目中使用了类似的方法,它的工作原理很吸引人。

在数据库中,我需要获取任何单个时区中的日期,然后只有它才能正确处理

您可以将时间存储为一个时区中的时间戳或日期时间。 当查询DateTime字段时,您可以将DateTime对象中的时间转换为该时区,或者-如果您的数据库支持,则使用选定的时区进行查询。

Gordon answered 2020-02-09T19:02:23Z

17 votes

一个更简单的方法如下所示:

date_default_timezone_set('Europe/London'); // your user's timezone

$my_datetime='2013-10-23 15:47:10';

echo date('Y-m-d H:i:s',strtotime("$my_datetime UTC"));

如PHP手册中所述,strtotime()也接受时区,您只需要将其附加到日期时间即可。

我建议您将所有日期时间都存储在UTC中,因为这样您就不会在夏令时方面遇到任何问题。

soger answered 2020-02-09T19:02:52Z

11 votes

这对我有用,也很干净!

function convert_to_user_date($date, $format = 'n/j/Y g:i A', $userTimeZone = 'America/Los_Angeles', $serverTimeZone = 'UTC')

{

try {

$dateTime = new DateTime ($date, new DateTimeZone($serverTimeZone));

$dateTime->setTimezone(new DateTimeZone($userTimeZone));

return $dateTime->format($format);

} catch (Exception $e) {

return '';

}

}

function convert_to_server_date($date, $format = 'n/j/Y g:i A', $userTimeZone = 'America/Los_Angeles', $serverTimeZone = 'UTC')

{

try {

$dateTime = new DateTime ($date, new DateTimeZone($userTimeZone));

$dateTime->setTimezone(new DateTimeZone($serverTimeZone));

return $dateTime->format($format);

} catch (Exception $e) {

return '';

}

}

//example usage

$serverDate = $userDate = '2014-09-04 22:37:22';

echo convert_to_user_date($serverDate);

echo convert_to_server_date($userDate);

saada answered 2020-02-09T19:03:12Z

8 votes

这些答案都不对我有用(我跳过了尝试使用过于庞大的代码)。 我还认为仅针对一次转换更改默认时区就很奇怪。

这是我的解决方案:

function changeTimeZone($dateString, $timeZoneSource = null, $timeZoneTarget = null)

{

if (empty($timeZoneSource)) {

$timeZoneSource = date_default_timezone_get();

}

if (empty($timeZoneTarget)) {

$timeZoneTarget = date_default_timezone_get();

}

$dt = new DateTime($dateString, new DateTimeZone($timeZoneSource));

$dt->setTimezone(new DateTimeZone($timeZoneTarget));

return $dt->format("Y-m-d H:i:s");

}

因此,要转换为服务器默认值,您只需传递一个时区:

changeTimeZone("2016-10-24 16:28", "Asia/Tokyo");

要将服务器默认值转换为用户,请将第二个参数保留为空或空白:

changeTimeZone("2016-10-24 16:28", "", "Asia/Tokyo");

要在与默认设置无关的时区之间切换,您需要提供2个时区:

changeTimeZone("2016-10-24 16:28", "America/New_York", "Asia/Tokyo");

Skeets answered 2020-02-09T19:03:49Z

5 votes

DateTime :: setTimezone-date_timezone_set —设置DateTime对象的时区

面向对象的风格

$date = new DateTime('2000-01-01', new DateTimeZone('Pacific/Nauru'));

echo $date->format('Y-m-d H:i:sP') . "\n";

$date->setTimezone(new DateTimeZone('Pacific/Chatham'));

echo $date->format('Y-m-d H:i:sP') . "\n";

?>

程序风格

$date = date_create('2000-01-01', timezone_open('Pacific/Nauru'));

echo date_format($date, 'Y-m-d H:i:sP') . "\n";

date_timezone_set($date, timezone_open('Pacific/Chatham'));

echo date_format($date, 'Y-m-d H:i:sP') . "\n";

?>

上面的示例将输出:

2000-01-01 00:00:00+12:00

2000-01-01 01:45:00+13:45

itsazzad answered 2020-02-09T19:04:22Z

3 votes

UTC到本地:

$datetime = date("Y-m-d H:i:s");

$utc = new DateTime($datetime, new DateTimeZone('UTC'));

$utc->setTimezone(new DateTimeZone('America/Sao_Paulo'));

echo $utc->format('Y-m-d H:i:s');

?>

Eduardo Marcolino answered 2020-02-09T19:04:42Z

1 votes

$time='6:02';

$dt = new DateTime($time, new DateTimeZone('America/New_York'));

//echo $dt->format('Y-m-d H:i:s') . PHP_EOL;

$dt->setTimezone(new DateTimeZone('Asia/Kolkata'));

echo $dt->format('H:i') . PHP_EOL;

?>

Hara Prasad answered 2020-02-09T19:04:57Z

1 votes

//将日期从一个区域转换为另一个区域。/ *     $ zone_from ='亚洲/加尔各答';

$zone_to='America/Phoenix';

date_default_timezone_set($zone_from);

$convert_date="2016-02-26 10:35:00";

echo $finalDate=zone_conversion_date($convert_date, $zone_from, $zone_to);

*/

function zone_conversion_date($time, $cur_zone, $req_zone)

{

date_default_timezone_set("GMT");

$gmt = date("Y-m-d H:i:s");

date_default_timezone_set($cur_zone);

$local = date("Y-m-d H:i:s");

date_default_timezone_set($req_zone);

$required = date("Y-m-d H:i:s");

/* return $required; */

$diff1 = (strtotime($gmt) - strtotime($local));

$diff2 = (strtotime($required) - strtotime($gmt));

$date = new DateTime($time);

$date->modify("+$diff1 seconds");

$date->modify("+$diff2 seconds");

return $timestamp = $date->format("Y-m-d H:i:s");

}

user2801665 answered 2020-02-09T19:05:17Z

php datetime 时区,datetime-php中的时区转换相关推荐

  1. java datetime now_相当于C#的DateTime.Now在Java中?

    问题 如何在Java中获取当前日期? 在C#中它是DateTime.Now. #1 热门回答(405 赞) 只需构建一个没有任何参数的new206​​66728对象;这会将当前日期和时间分配给新对象. ...

  2. django mysql 时区_django 中的时区设置

    在settings.py中设置了 TIME_ZONE = 'Asia/Shanghai' USE_TZ = True 现在的北京时间是 22点35分.django shell 中运行 timezone ...

  3. Asp.net中的时区

    首先,日期时间转换在 Asp.net 中的几种应用: 1. <ASP:BOUNDCOLUMN DATAFIELD= "JoinTime " DATAFORMATSTRING= ...

  4. abp+dapper+mysql_ABP公共结构 – 时间与时区设置 - ABP 中文文档

    2.6 ABP公共结构 – 时间与时区设置 2.6.1 简介 虽然有些应用的需求是单时区,然而另一些是需要对不同的时区进行处理的.为了满足这样的需求以及对时间的处理.ABP提供了处理时间操作的通用基础 ...

  5. SimpleDateFormat.parse()方法中的时区设置缺陷

    SimpleDateFormat.Date和Calendar这三个类现在很多地方已经不再推荐使用了,JDK8可以使用Instant代替Date,LocalDateTime代替Calendar,Date ...

  6. java 时区 不正确_Java中的时区不匹配

    我在美国的Ubuntu服务器中运行一个Java应用程序,并配置了CEST时区. 如果我在终端中运行Date命令,它将以CEST Zone时间返回日期-这是完美的. 但是在Java中,如果我运行以下代码 ...

  7. 面试题1 -- Java 中,怎么在格式化的日期中显示时区?

    使用SimpleDateFormat来实现格式化日期 import java.text.SimpleDateFormat; import java.util.Date;public class Dat ...

  8. PYTHON中的时区处理,LMT差6分钟的问题解决

    问题: 在python中,时间要做本地化,可以用pytz模块获取时区对象(datetime.timezone),如果用django的话,django.utils.timezone中的get_defau ...

  9. 生信服务器 | 更改 CentOS/RHEL 6/7 中的时区

    这几天在学习折腾 docker 的时候遇到一个很常见的问题,就是 run container 的时候发现大部分 image 默认使用的时间都是 UTC  (Universal Time Coordin ...

最新文章

  1. 【mysql的编程专题⑤】自定义函数
  2. 剖析Linux系统启动过程
  3. 从傅里叶(Fourier)变换到伽柏(Gabor)变换再到小波(Wavelet)变换
  4. 第六次作业—例行报告
  5. 平板电脑可以插u盘吗_电视TV盒子安装app的六个方法,u盘/电脑/手机都可以安装...
  6. android 捕捉home键
  7. 推荐几个好的域名交易站点
  8. 游戏软件性能测试怎么做?常规测试知识要点总结
  9. html+css做的丝带标签
  10. CentOS[linux]操作系统的安装手册
  11. 使用一个for循环将N*N的二维数组的所有值置1
  12. Android音视频从入门到提高---任务列表
  13. SLAM_关于VIO中IMU预积分的讲解
  14. 软件测试入门之测试项目启动与研读需求文档(精辟干货)
  15. 主播入门到精通培训实操手册全套资料(共300份)
  16. gnutls_handshake() failed: A TLS fatal alert has been received
  17. 东北大学软件项目管理与过程改进复习提纲(2020)——第八章《项目质量管理》
  18. MuMu模拟器开发者文档
  19. Linux Crontab 定时任务列子
  20. python数据建模步骤_AR(I)MA时间序列建模过程——步骤和python代码

热门文章

  1. 去掉Input文本框的边框
  2. 为什么精益与DevOps相得益彰?
  3. html作业布置,布置作业.html
  4. 2021秋招-机器阅读理解整理
  5. NOR FLASH读、写、擦原理与实现(1)——性能简述与术语解释
  6. 深度学习的权重衰减是什么_【深度学习理论】一文搞透Dropout、L1L2正则化/权重衰减...
  7. 笔记一:微信小游戏可视化开发工具-变更动画播放速度
  8. VC智能感知 clw ncb bsc文件的作用
  9. C语言实现八大排序算法详解及其性能之间的
  10. 阿里云新手最全面教程 从购买到项目发布