我发现我无法真正解释的内容,也许有人可以给我提示。

我有以下测试代码,使用date()gmdate()打印2个格式化的时间戳,一个用于31.03.2013,一个用于31.03.2014:

<?php

function print_date($timestamp, $year) {
  // Add timezone offset for germany
  $timestamp += 3600;
  print "in $year\n";
  print "date:   " . date('d.m.Y H:i:s', $timestamp) . "\n";
  print "gmdate: " . gmdate('d.m.Y H:i:s', $timestamp) . "\n";
  print "\n";
}

$end_2013 = 1364684400; // 31.03.2013
$end_2014 = 1396216800; // 31.03.2014
print_date($end_2013, '2013');
print_date($end_2014, '2014');

print "Default timezone: " . date_default_timezone_get() . "\n";

结果使我感到惊讶:
in 2013
date:   31.03.2013 01:00:00
gmdate: 31.03.2013 00:00:00

in 2014
date:   31.03.2014 01:00:00
gmdate: 30.03.2014 23:00:00

Default timezone: Europe/Berlin

2014年的差异来自何处?我的第一个想法是夏令时,但是为什么在2013年没有效果?
为什么2014年会有2小时的差异,而2013年只有1小时的差异?

最佳答案

柏林的夏令时开始于

2013 Sunday, 31 March, 02:00
2014 Sunday, 30 March, 02:00

您为每个日期指定的时间值是该日期的00:00,因此对于2013年3月31日(星期日),它在 2am之前是,因此没有夏令时; 2014年是3月30日凌晨2点之后

关于php - date()和gmdate()的结果不同,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22219770/

10-09 00:44
查看更多