【问题标题】:How to set the date regardless of timezones?无论时区如何设置日期?
【发布时间】:2014-04-10 08:02:43
【问题描述】:

我需要根据创建日期查询记录。例如,我必须查询在两个日期2012-03-01 00:00:002012-03-03 23:59:00 之间创建的记录。我在查询中使用时间,例如

$from_date = '01/03/2012';
$to_date = '03/03/2012';
$from = date('Y-m-d 00:00:00', strtotime($from_date));
$to = date('Y-m-d 23:59:00', strtotime($to_date));

查询在本地主机中运行良好,因为我的数据库在我的国家。但它在实时站点中无法正常工作。由于时区不同,创建日期会自动更改为

$from = 2012-03-01 17:00:00
$to = 2012-03-03 16:59:00

即,它更改为时区。我尝试将日期转换为该时区。但它没有用。现在,我该怎么做才能为查询提供正确的时间?

【问题讨论】:

    标签: php mysql sql-server date datetime


    【解决方案1】:

    您应该在调用date(...) 方法之前调用date_default_timezone_set

    值得注意的是,从 PHP 5.1.0 开始,如果时区无效,每次调用日期/时间函数都会生成 E_NOTICE,如果使用系统设置或 TZ 环境变量,则会生成 E_WARNING 消息,所以值得看看你的错误......

    【讨论】:

    • 或者如果可能的话,在你的服务器配置中设置!
    • 好点@Michael - 链接的文档确实在ini文件中提到了设置date.timezone
    • 我同意@RowlandShaw 你应该在date() 之前致电date_default_timezone_set()
    【解决方案2】:

    我认为这是你需要做的

    $from_date = '01/03/2012';
    $to_date = '03/03/2012';
    $from = date('Y-m-d H:i:s', strtotime($from_date." 00:00:00"));
    $to = date('Y-m-d H:i:s', strtotime($to_date." 23:59:00"));
    

    【讨论】:

      【解决方案3】:

      上面的答案是正确的,但我想就你的问题给你不同的观点。由于您只对适当的日期而不是小时感兴趣,因此您可以通过直接在 sql 查询中格式化存储在 db 中的日期来使用日期 $from_date$to_date,如下所示:

      DATE_FORMAT(column_with_date,'%d/%m/%Y')
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-07-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-07-30
        • 1970-01-01
        • 1970-01-01
        • 2020-08-15
        相关资源
        最近更新 更多