php - 在 PHP 中模拟不同的服务器日期时间

标签 php datetime

是否可以让 PHP 应用程序认为服务器日期时间偏移了一个很大的可配置量(比如 6 个月前,或 6 个月后)?

背景: 我们有一个处理体育赛事的 Web 应用程序,现在我们想在我们的开发环境中运行它,使网站认为它是 2009 年秋季而不是 2010 年夏季。那是因为我们有去年的大量数据秋季和今年的季节尚未开始,因此使用大量真实数据测试新功能会更容易,而不是为 2010 年编造新的测试数据。

我们不想实际更改服务器的日期和时间。当前最好的选择似乎是将代码中的所有 date() 调用更改为 my_date(),然后让 my_date() 将偏移量添加到实际系统日期。

似乎此功能在类似情况下对其他人很有用,所以我很好奇是否有更简单的方法通过一些配置参数在全局范围内执行此操作而无需修改代码。我做了RTM。

最佳答案

您可以安装 Runkit在开发服务器上并重新定义所有必需的 dateTime 函数以返回修改后的值,例如

if(APP_ENV === 'testing') {
    include 'datetime-monkeypatches.php';
}

其中 datetime-monkeypatches.php 将包含您对所需功能的补丁。这样您就不必更改实际代码。这就像对原始函数使用适配器一样,只要您将它们保存在那个单独的文件中,它就可以保持可维护性。

另一种选择是使用 http://antecedent.github.io/patchwork

Patchwork is a PHP library that makes it possible to redefine user-defined functions and methods at runtime, loosely replicating the functionality runkit_function_redefine in pure PHP 5.3 code, which, among other things, enables you to replace static and private methods with test doubles.

关于php - 在 PHP 中模拟不同的服务器日期时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3271735/

相关文章:

MySQL:将相对秒数转换为日期时间?

java - Android:如何获取此处指定格式的时区字符串

c# - "System.InvalidCastException: Specified cast is not valid"- 日期时间

php - PHP current() 函数是否返回数组的副本或引用?

javascript - 我无法实时更新数据

php - 如何在php中调用mysql过程

javascript - js window.redirect 不断更新

php - 在elasticsearch索引中存储带有可选参数的日期时间?

r - 如何按周对data.frame进行子集然后求和?

php - codeigniter 中的 Is_unique 表单验证