【问题标题】:How to format and calculate date based on timezone in php如何在php中根据时区格式化和计算日期
【发布时间】:2016-02-03 10:33:22
【问题描述】:

如何根据时区格式化和计算日期。考虑下面的示例

$date = "2015-12-16 07:00:00"; $timeZonePassed = "CET";

现在我的函数应该返回一个 CET 格式的日期,比如 mm.dd.yy h.i.s。当我这样做 $dateConv->format($dateFormat) 时,我的日期始终显示为 mm/dd/yy 但我希望它应该根据时区计算时间并根据时区显示日期格式。

function formatDate($date, $timeZonePassed) {
    $date = date('Y-m-d H:i:s', strtotime($date . "UTC")); 
    $dateFormat ='m/d/Y h:i A';
    $dateConv = date_create_from_format('Y-m-d H:i:s', $date);
    $dateConv->setTimezone(new DateTimeZone($timeZonePassed);
    return $dateConv->format($dateFormat);
}

【问题讨论】:

  • 日期显示的格式将基于您使用的格式掩码,您通过$dateFormat ='m/d/Y h:i A';...明确设置。PHP 不会为您选择格式,无论是基于时区与否,所以你的期望是错误的
  • 时区不是一种格式。它们是完全不同的概念。我还强烈建议您使用时区 ID(例如“欧洲/巴黎”)而不是“部分”区域的缩写。例如,欧洲/伦敦半年观察 BST,半年观察 GMT。这些都不是时区 - 欧洲/伦敦是。
  • @MarkBaker,谢谢。有没有办法在 php 中知道基于时区的日期格式?
  • 不完全基于时区,因为没有标准的时区格式.... CET(中欧时间)用于阿尔巴尼亚、安道尔、奥地利、比利时、波斯尼亚和黑塞哥维那、克罗地亚、捷克共和国、丹麦、法国、德国、直布罗陀、匈牙利、意大利、科索沃、列支敦士登、卢森堡、马耳他、摩纳哥、黑山、荷兰、挪威、波兰、马其顿共和国、圣马力诺、塞尔维亚、斯洛伐克、斯洛文尼亚、西班牙、瑞典、瑞士和梵蒂冈,更不用说阿尔及利亚和突尼斯了——而且这些国家并不都使用相同的日期/时间格式。
  • 例如阿尔及利亚使用dd/mm/yyyy;波兰使用dd/mm/yyyydd.mm.yyyyyyyy-mm-dd;西班牙使用dd/mm/yyyy,但西班牙巴斯克地区使用yyyy.mm.dd等;所以甚至没有按国家/地区划分的标准格式,更不用说按时区了

标签: php date datetime timestamp


【解决方案1】:

试试这个

function formatDate($date, $timeZonePassed) {

$UTC = new DateTimeZone("UTC");
$date= date('Y-m-d H:i:s', strtotime($date)); 
$dateConv = new DateTime( $dates, $UTC  );
$dateFormat ='m/d/Y h:i A';

$dateConv->setTimezone(new DateTimeZone($timeZonePassed));
return $dateConv->format($dateFormat);
}

好好工作,这对你有用

【讨论】:

    猜你喜欢
    • 2012-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-04
    • 1970-01-01
    • 2017-09-14
    • 2019-01-09
    • 2023-03-29
    相关资源
    最近更新 更多