Zend Date DST Bug 的解决方法

2024-07-03

我发现中的一个错误Zend_Date当设置的时间跨越 DST 更改时 http://zendframework.com/issues/browse/ZF-10584.

这是说明问题的代码:

date_default_timezone_set('America/New_York');

echo '<pre>';

// DST BEGINS '2012-03-11 02:00:00' - "Spring Forward"
$a = new Zend_Date('2012-03-11 00:00:00', 'yyyy-MM-dd HH:mm:ss');
$a->setTime('04:00:00', 'HH:mm:ss');
echo $a->toString('yyyy-MM-dd HH:mm:ss', 'iso')
        . ' // expected: 2012-03-11 04:00:00' . PHP_EOL;
$b = new Zend_Date('2012-03-11 04:00:00', 'yyyy-MM-dd HH:mm:ss');
$b->setTime('00:00:00', 'HH:mm:ss');
echo $b->toString('yyyy-MM-dd HH:mm:ss', 'iso')
        . ' // expected: 2012-03-11 00:00:00' . PHP_EOL;

// DST ENDS '2012-11-04 02:00:00' - "Fall Back"
$c = new Zend_Date('2012-11-04 00:00:00', 'yyyy-MM-dd HH:mm:ss');
$c->setTime('04:00:00', 'HH:mm:ss');
echo $c->toString('yyyy-MM-dd HH:mm:ss', 'iso')
        . ' // expected: 2012-11-06 04:00:00' . PHP_EOL;
$d = new Zend_Date('2012-11-04 04:00:00', 'yyyy-MM-dd HH:mm:ss');
$d->setTime('00:00:00', 'HH:mm:ss');
echo $d->toString('yyyy-MM-dd HH:mm:ss', 'iso')
        . ' // expected: 2012-11-06 00:00:00' . PHP_EOL;

echo '</pre>';

Ouputs:

2012-03-11 05:00:00 // expected: 2012-03-11 04:00:00
2012-03-10 23:00:00 // expected: 2012-03-11 00:00:00
2012-11-04 03:00:00 // expected: 2012-11-06 04:00:00
2012-11-04 01:00:00 // expected: 2012-11-06 00:00:00

我需要解决这个错误,但我很困惑。


SOLUTION

基于答案 https://stackoverflow.com/a/7183700/244826 from nerdzila https://stackoverflow.com/users/908930/nerdzila,并研究他的解决方案引入了一个错误 https://stackoverflow.com/q/8593660/244826,我现在在我的子类中有这个Zend_Date:

/**
 * Call the function twice to work around the DST bug
 * http://zendframework.com/issues/browse/ZF-10584
 * https://stackoverflow.com/questions/7181702/work-around-for-zend-date-dst-bug
 * https://stackoverflow.com/questions/8593660/zend-date-dst-bug-test-whether-a-date-is-a-time-change-date
 * TODO: remove this once the bug is fixed
 *
 * @param  string|integer|array|Zend_Date  $time    Time to set
 * @param  string                          $format  OPTIONAL Timeformat for parsing input
 * @param  string|Zend_Locale              $locale  OPTIONAL Locale for parsing input
 * @return My_Date Provides fluid interface
 * @throws Zend_Date_Exception
 */
public function setTime($time, $format = null, $locale = null)
{
    // start time zone juggling so that localtime() returns the correct results
    $tzOrig = date_default_timezone_get();
    date_default_timezone_set($this->getTimezone());

    // capture orignal info
    $timeInfoOrg = localtime($this->getTimestamp(), true);

    // set the time
    parent::setTime($time, $format, $locale);

    // if the dst has changed, perform workaround
    $timeInfoNew = localtime($this->getTimestamp(), true);
    if ((0 < $timeInfoOrg['tm_isdst']) != (0 < $timeInfoNew['tm_isdst'])) {
        // set the time again
        parent::setTime($time, $format, $locale);
        // if the day changed, set it back
        if ($timeInfoOrg['tm_yday'] != $timeInfoNew['tm_yday']) {
            // localtime() year date is zero indexed, add one
            $this->setDayOfYear($timeInfoOrg['tm_yday'] + 1);
        }
    }

    // end time zone juggling
    date_default_timezone_set($tzOrig);

    // fluent
    return $this;
}

一旦错误修复,我可以简单地删除它。


这是一个不幸的错误。我通过打电话解决了这个问题setTime()每个日期两次:

...
$a->setTime('04:00:00', 'HH:mm:ss');
$a->setTime('04:00:00', 'HH:mm:ss');
...
$b->setTime('00:00:00', 'HH:mm:ss');
$b->setTime('00:00:00', 'HH:mm:ss');
...
$c->setTime('04:00:00', 'HH:mm:ss');
$c->setTime('04:00:00', 'HH:mm:ss');
...
$d->setTime('00:00:00', 'HH:mm:ss');
$d->setTime('00:00:00', 'HH:mm:ss');
...

我的结果:

2012-03-11 04:00:00 // expected: 2012-03-11 04:00:00
2012-03-10 00:00:00 // expected: 2012-03-11 00:00:00
2012-11-04 04:00:00 // expected: 2012-11-04 04:00:00
2012-11-04 00:00:00 // expected: 2012-11-04 00:00:00
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Zend Date DST Bug 的解决方法 的相关文章

  • 如何将 SQL 查询的所有结果存储在多维数组中?

    大家好 我想将我的数组转换为其他数组类型 请帮助我 我 我用这个 row mysql fetch array result MYSQL ASSOC 输出是 Array user id gt 250 name gt a age gt sfsf
  • GUI MySQL 数据库前端[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我对一款软件有一个有点绝望的愿望清单 但我不知道它是否存在 它需要什么 免费使用 在小型企业中 在带有
  • WordPress 如何在没有重写映射的情况下重写 URL?

    WordPress 站点的 htaccess 文件如下所示
  • $.getJSON 和 PHP 文件

    是否可以隐藏 php 文件的名称 document ready function getJSON getdata php function returned data if returned data 1 div wall html use
  • 在 php 中编写回调函数时传递参数(Laravel 5)

    我正在使用 Laravel 5 进行 php 编程 我有这段代码 newUser this gt create request gt all newUser gt save newAccount new Account user id gt
  • 未找到命令 - exec() 命令中出现错误

    我从 php 文件运行这个 exec epm package 我在 error log 中收到以下错误 sh epm command not found 我在终端手动测试它工作正常 尝试输入完整路径名 exec path to epm pa
  • 在 Codeigniter 中创建块/模块

    到目前为止 我一直很喜欢使用 CodeIgniter 创建一些简单的 Web 应用程序 实际上只是学习框架 但我无法找到创建块 模块的简单方法 我希望有一个 最近的图像 块 我可以将其放在网站上的任何页面上 而无需在每个页面的控制器中重复查
  • 函数内的函数。?

    此代码生成的结果为 56 function x y function y z return z 2 return y 3 y 4 y x y y y echo y 知道里面发生了什么吗 我很困惑 X 返回 值 3 而 Y 返回 值 2 给定
  • 调整大小然后裁剪 PHP

    好的 基本上我希望所有图像都是 170x170px 的正方形 因此 如果图像不是正方形 我希望调整它的大小 然后在中间裁剪 我花了很多时间玩这个 但一无所获 我已经让它裁剪较大图像的一部分等 但我特别需要调整图像大小 然后裁剪 任何帮助将不
  • 如何循环调用分页函数?

    我正在尝试使用空气桌API https airtable com api从我的数据中检索记录 具体来说 是我在列单元格中的 URL 列表 我写了一个函数 get airtable records 通过以下方式进行 API 调用curl它可以
  • 未找到特征“Venturecraft\Revisionable\RevisionableTrait”

    我正在使用 laravel 4 我想跟踪对表进行的所有交易的历史记录 我按照这些步骤操作 added venturecraft revisionable 1 在作曲家 json php composer phar update 在我的项目的
  • 如何使用 Android Volley 显示/请求 JSON 对象?

    我在 Android Studio 中遇到如何请求 JSON 对象的问题 我的 Logcat 只能打印 String onResponse 而不能打印 JSONObject 值 我在 AccessActivity java 内的 try 行
  • 模糊不同值

    我有一个房地产列表数据库 需要返回社区列表 现在我正在使用 mysql DISTINCT 它返回所有不同的值 我的问题是有很多社区具有相似的名称 例如 Park View Sub 1 Park View Park View Sub 2 Pa
  • 如何在 PHP 中直接将 docx 转换为 ePub? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 试图找到一个 PHP 库 使我能够将 docx 转换为 ePub 我知道 Java 解决方案 例如http code google com
  • 发送抓取请求以获取 torrent 的种子和同级

    我一直在尝试创建一个 torrent 网站 但我遇到了以下问题 如何发送 torrent 抓取请求以获取其播种者和水蛭 我有一个 PHP 类函数 它为我提供公告列表 public function getTrackers Load trac
  • Node.js如何重现PHP MD5加密

    我正在将现有的基于 php 的网站转换为 node js 应用程序 并且我需要将这种加密方法从 php 复制到 js private static passwordSalt d2g6IOP U U VUIPU HN V URerjh0 rf
  • PHP:如何使图像中的绿色区域(背景)透明?

    我是 Stackoverflow 的新人 我非常想弄清楚是否可以使用 PHP 脚本使图像的特定颜色透明 如果是的话 该如何去做呢 假设这是背景颜色 绿色 必须完全透明的图像 法国热狗带绿色背景 http clubace dk hotdog1
  • 解析错误:语法错误,意外的 T_SL PHP heredoc

    我不断收到以下错误 解析错误 语法错误 home a4999406 public html willingLog html 第 70 行出现意外的 T SL 以下代码 第一行是第 70 行 echo lt lt
  • 何时何地打开数据库连接

    我正在努力实现发现的 mysql 类的使用here http www ricocheting com scripts php mysql wrapper php在现有脚本中 该脚本几乎总是需要与数据库交互 即使有时不需要 在这种情况下 最佳
  • PHP 使用正则表达式分解字符串

    我有一个长字符串 由一系列用单引号分隔的句子组成 Example This s sentence number 1 This s sentence number 2 请注意 该字符串的句子本身有单引号部分 这些部分已被转义 我需要使用单引号

随机推荐

  • React Native + Appium iOS elementByAccessibilityId.text()

    我正在使用 Appium Jest 为 Android 和 iOS 编写 React Native 测试 这是我的 React Native 元素
  • React Native + Appium iOS elementByAccessibilityId.text()

    我正在使用 Appium Jest 为 Android 和 iOS 编写 React Native 测试 这是我的 React Native 元素
  • Mysql查询。连接和子查询有什么区别?

    我总是认为 join 会得到某些结果 然后仅使用这些结果进行连接 SELECT FROM tbl AS t1 JOIN tbl2 AS t2 ON t1 id t2 foreignId JOIN tbl3 AS t3 ON t2 id t3
  • Mysql查询。连接和子查询有什么区别?

    我总是认为 join 会得到某些结果 然后仅使用这些结果进行连接 SELECT FROM tbl AS t1 JOIN tbl2 AS t2 ON t1 id t2 foreignId JOIN tbl3 AS t3 ON t2 id t3
  • 如何在Rails启动时创建线程?

    我试图在 Rails 启动时创建一个线程 该线程将在应用程序的整个生命周期中运行 奇怪的是 我已经将其与我正在运行的另一个线程一起使用了 我复制了该 工作 代码并将其用作新线程的新代码的样板 但线程不会启动 代码位于配置 初始化程序中 这是
  • 如何在Rails启动时创建线程?

    我试图在 Rails 启动时创建一个线程 该线程将在应用程序的整个生命周期中运行 奇怪的是 我已经将其与我正在运行的另一个线程一起使用了 我复制了该 工作 代码并将其用作新线程的新代码的样板 但线程不会启动 代码位于配置 初始化程序中 这是
  • 如何使用 numpy.void 类型

    我加载了一个MATLAB mat文件通过scipy io loadmat它给了我一个清单numpy void对象 它们是什么 如何使用以及在哪里可以得到一些参考文档在他们 根据numpy文档 http docs scipy org doc
  • 如何使用 numpy.void 类型

    我加载了一个MATLAB mat文件通过scipy io loadmat它给了我一个清单numpy void对象 它们是什么 如何使用以及在哪里可以得到一些参考文档在他们 根据numpy文档 http docs scipy org doc
  • git 切换分支而不丢弃本地更改

    好吧 假设有一天我们碰巧做了一堆修改 当我们去提交它们时 我们注意到我们正在错误的分支上工作 我们如何强制git切换分支不丢弃本地更改 在等待回复时 我可能会以一种天真的方式解决这个问题 但我想知道是否有正确的程序 因为如果我说这之前没有发
  • git 切换分支而不丢弃本地更改

    好吧 假设有一天我们碰巧做了一堆修改 当我们去提交它们时 我们注意到我们正在错误的分支上工作 我们如何强制git切换分支不丢弃本地更改 在等待回复时 我可能会以一种天真的方式解决这个问题 但我想知道是否有正确的程序 因为如果我说这之前没有发
  • 具有 SHA-1 的 .NET RSACryptoServiceProvider 的 Java 等效项

    我有以下 C 数据签名代码 RSACryptoServiceProvider rsa new RSACryptoServiceProvider string PrivateKeyText
  • 具有 SHA-1 的 .NET RSACryptoServiceProvider 的 Java 等效项

    我有以下 C 数据签名代码 RSACryptoServiceProvider rsa new RSACryptoServiceProvider string PrivateKeyText
  • 如何使用 Async Retrofit 2.0 返回值

    我是改造新手 我有一个异步改造功能 目的如下示例 public boolean bookmark boolean result false Call
  • 如何使用 Async Retrofit 2.0 返回值

    我是改造新手 我有一个异步改造功能 目的如下示例 public boolean bookmark boolean result false Call
  • Django modelform 如何添加确认密码字段?

    这里我需要额外添加一个confirmation password在我的表单中 我使用了 Django 的模型表单 我还需要验证这两个密码 如果出现以下情况 它必须引发验证错误password1 password2 这是我的 forms py
  • Django modelform 如何添加确认密码字段?

    这里我需要额外添加一个confirmation password在我的表单中 我使用了 Django 的模型表单 我还需要验证这两个密码 如果出现以下情况 它必须引发验证错误password1 password2 这是我的 forms py
  • 为什么二进制文件在压缩时会损坏?

    我有一项通过网络提供压缩文件的服务 该 zip 包含 Windows 平台的可执行文件 我正在使用 RubyZip 库来压缩文件 但该过程会损坏二进制文件 在我的本地服务器上 我们通过系统调用使用 zip 命令 它工作正常 zip 命令在
  • 为什么二进制文件在压缩时会损坏?

    我有一项通过网络提供压缩文件的服务 该 zip 包含 Windows 平台的可执行文件 我正在使用 RubyZip 库来压缩文件 但该过程会损坏二进制文件 在我的本地服务器上 我们通过系统调用使用 zip 命令 它工作正常 zip 命令在
  • Zend Date DST Bug 的解决方法

    我发现中的一个错误Zend Date当设置的时间跨越 DST 更改时 http zendframework com issues browse ZF 10584 这是说明问题的代码 date default timezone set Ame
  • Zend Date DST Bug 的解决方法

    我发现中的一个错误Zend Date当设置的时间跨越 DST 更改时 http zendframework com issues browse ZF 10584 这是说明问题的代码 date default timezone set Ame