当前位置: 首页 > 知识库问答 >
问题:

与夏时制有关的PHP日期时间转换问题

公孙俭
2023-03-14

我在我的webapp中有一些本地化功能(通过Ajax公开),使用户能够在他们自己的时区以及与数据主要相关的实体位置相关的时区中显示一些日期时间信息。

>

  • 输入值25/11/2018 16:00 NZDT(太平洋/奥克兰)=UTC+13
  • 产值应为25/11/2018 14:00 ADT(澳大利亚/悉尼)=UTC+11
  • 如果我从数据库中提取源值,然后进行转换,那么计算工作正常,没有问题
  • 如果我使用表单提供的值(如果用户更新了该值而没有保存它,我需要检查该值),则会发生以下情况:

    FROM DB1=2018-11-25 03:00:00(以DB表示的值,以UTC表示)

    代码如下:

    echo "FROM DB1:  ".$getListing['lo_deadline']."<BR />";
    echo "FROM FORM1:".$in_lo_deadline."<BR />";
    $frmDateTime =  DateTime::createFromFormat($this->view->user->user_datetimeformat, $in_lo_deadline,new DateTimeZone($list_tmzn));                   
    echo "FROM FORM2:".$frmDateTime->format('Y-m-d h:i:s')."<BR />";
    //If $frmDateTime is in daylight savings then subtract an hour to arrive at the correct UTC value                   
    if ($frmDateTime->format('I'))
    {
        date_sub($frmDateTime, date_interval_create_from_date_string('1 hours'));
    }
    echo "FROM FORM3:".$frmDateTime->format('Y-m-d h:i:s')."<BR />";                    
    $dates['set_dead'] = convertUserDate($frmDateTime->format('Y-m-d h:i:s'), $this->view->user->user_datetimeformat, $user_tmzn,'UTC');
    
  • 共有1个答案

    江亮
    2023-03-14

    我从您的代码中了解到,它之所以显示2018-11-25 04:00:00是因为AM/PM格式。在代码中应该使用大写h而不是h

    您需要了解24小时和12小时格式之间的区别。2018-11-25 04:00:00根据您的格式是AM/PM或12小时格式,但在24小时格式中应为2018-11-25 16:00:00。数据库时间总是24小时格式。

    改变

    $frmDateTime->format('Y-m-d h:i:s')
    

    $frmDateTime->format('Y-m-d H:i:s')
    

    注意:您不需要手动减去一个小时来计算夏时制,因为php是自动完成的。

     类似资料:
    • 问题内容: 我想知道用Java最简单的方法来获取将来的夏令时将改变的日期列表。 一种相当灵活的方法是简单地迭代一整年的时间,然后对它们进行TimeZone.inDaylightTime()测试。这将起作用,并且我不担心效率,因为这仅在我的应用每次启动时都需要运行,但是我想知道是否有更简单的方法。 如果您想知道为什么要这样做,那是因为我有一个javascript应用程序,该应用程序需要处理包含UTC

    • 问题内容: 在SQL Server 2005中,为什么这样做: 展示: 1900年1月1日上午12:00 我会以为应该的吗? 问题答案: 空字符串将强制转换为,之后将强制转换为时代日期。 与不同,区分和一个空字符串。

    • 问题内容: 我需要一种简便的方法,可以在不使用任何库的情况下将日期时间戳转换为UTC(从服务器所在的任何时区)。 问题答案: 尝试getTimezone和setTimezone,请参见示例 (但这确实使用了一个类) 更新: 没有任何类,您可以尝试这样的事情: 注意:您可能还需要将时区设置回原始

    • 我试图使用pandas.to_datetime()将只包含小时、分钟和秒的日期列转换为日期时间形式。但是,它会自动添加年份和日期。我还尝试使用pandas.to_datetime(df["time"],format = % H:% M:% S ")dt . time,数据类型仍然是object。有没有什么方法可以变成不带年份和日期的datetime格式?

    • 问题 你需要执行简单的时间转换,比如天到秒,小时到分钟等的转换。 解决方案 为了执行不同时间单位的转换和计算,请使用 datetime 模块。 比如,为了表示一个时间段,可以创建一个 timedelta 实例,就像下面这样: >>> from datetime import timedelta >>> a = timedelta(days=2, hours=6) >>> b = timedelta

    • 主要内容:标签属性,JSF <f:convertDateTime>实例,JSF <f:convertDateTime>实例2标签用于将用户输入转换为指定的日期。 您可以通过将组件标签内的标签嵌套来将组件的数据转换为。 标签有几个属性,可以指定数据的格式和类型。 标签属性 属性 类型 描述 binding DateTimeConverter 它用于将转换器绑定到受委托Bean属性。 dateStyle String 它用于定义由指定的日期或日期字符串的日期部分的格式。 只适用于是或,如果未定义。