【问题标题】:how to use mktime with "I" (summertime option)?如何将 mktime 与“I”一起使用(夏令时选项)?
【发布时间】:2016-08-05 15:13:34
【问题描述】:

我想编写一个脚本,如果给定的日期是在夏令时,它会返回 true。所以我在 php documentation 中找到了 date("stuff" mktime)。并且有一个参数字符串列表。上面写着:"I (capital i) Whether or not the date is in daylight saving time"。下面的几行我找到了这个例子:

echo "July 1, 2000 is on a " . date("l", mktime(0, 0, 0, 7, 1, 2000));

这就是我在脚本中写这个的原因:

function summertime(string $date) : bool {
    $pieces = explode('-', $date);
    $year = (int) $pieces[0];
    $month = (int) $pieces[1];
    $day = (int) $pieces[2];

    return date("I", mktime(0, 0, 0, $month, $day, $year));
}

echo summertime("1981-07-07");

无论我输入哪个日期,它总是返回 false/0...我找不到差异或错误...仅供参考:我使用的是 PHP 7.0。

【问题讨论】:

  • 尝试设置时区,例如与date_default_timezone_set。您当前的默认时区可能根本没有夏令时(例如 UTC)。

标签: php date php-7 mktime


【解决方案1】:

正如 Markus Laire 的评论所述,您可能需要正确设置时区。我还建议使用 DateTime 类。以下示例展示了如何在创建新日期时设置特定时区:

示例 1:

$tz = new DateTimeZone('Europe/Berlin');
$date = new DateTime('1981-07-07', $tz);
echo $date->format('I');
// outputs '1'

示例 2:

$tz = new DateTimeZone('Europe/Berlin');
$date = new DateTime('1981-01-01', $tz);
echo $date->format('I');
// outputs '0'

【讨论】:

    猜你喜欢
    • 2014-04-28
    • 2011-02-10
    • 1970-01-01
    • 2018-11-02
    • 2015-11-03
    • 2019-08-22
    • 2015-11-10
    • 1970-01-01
    • 2012-02-10
    相关资源
    最近更新 更多