草庐IT

php - 在 PHP 日期中添加天数时,不会增加到下一年

coder 2023-10-20 原文

我正在抓取一个必须输入日期范围才能获取数据的网站。我的开始日期范围是 2009-01-01 到 2009-01-14。然后我将下一个日期范围增加 15 天,这样我就总是以 14 天为单位进行处理(以免每次抓取得到太多数据)。

执行此操作的代码是:

$result = sqlGetState($db); //a sql query that gets the last start date - end date
$startDate = $result['startDate']; // start date from db
$endDate = $result['endDate']; // end date from db

$newStartDate = date('Y-m-d', strtotime($endDate. ' + 1 days')); // create a new start date, which is equal to the previous end date + 1 day 
$newEndDate = date('Y-m-d', strtotime($newStartDate. ' + 14 days')); // create a new end date, which is equal to the new start date + 14 days.
$timestamp = date('Y-m-d H:i:s', time() ); //2016-08-07 08:42:43
$affected_rows = sqlUpdateState($db,$newStartDate,$newEndDate,$timestamp); // update the "state" table with the new date values

所以我的“状态”表中的内容是我执行操作的时间戳、新日期以及新日期 + 14 天。

一切顺利,但后来我检查了存储 html 的表,发现没有存储新页面。然后我查看我的状态表,我看到了

开始日期:01/02/1970 和结束日期:01/16/1970

我认为 PHP 是“足够聪明”的,它知道在 12/31 时它应该将日期递增到下一年。这是 PHP 日期函数中的缺陷,还是我应该做的事情?


更新:2016 年 9 月 16 日

根据@bill-karwin 选定的最佳答案,这是我修改后的代码,并且运行良好:

$result = sqlGetState($db);
$startDate = date_create($result['startDate']);
$endDate   = date_create($result['endDate']);

echo "<p>saved start date: ".$startDate->format("Y-m-d")."</p>";
echo "<p>saved end date: ".$endDate->format("Y-m-d")."</p>";

$newStartDate = date_add($endDate, date_interval_create_from_date_string("1 days"));
$newStartDateString = $newStartDate->format("Y-m-d");

$newEndDate   = date_add($newStartDate, date_interval_create_from_date_string("14 days"));
$newEndDateString   = $newEndDate->format("Y-m-d");

echo "<p>new start date: " . $newStartDateString . "</p>";
echo "<p>new end date: " . $newEndDateString . "</p>";

$affected_rows = sqlUpdateState($db,$newStartDateString,$newEndDateString,$timestamp);

最佳答案

我不认为 strtotime() 可以像您那样用于日期算术。

我建议你这样编码:

$startDate = date_create($result['startDate']);
$endDate = date_create($result['endDate']);

$newStartDate = date_add($endDate, date_interval_create_from_date_string("1 days"));
$newEndDate = date_add($newStartDate, date_interval_create_from_date_string("14 days"));
$timestamp = date_create();

查看手册:

关于php - 在 PHP 日期中添加天数时,不会增加到下一年,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39521385/

有关php - 在 PHP 日期中添加天数时,不会增加到下一年的更多相关文章

  1. ruby - 我需要将 Bundler 本身添加到 Gemfile 中吗? - 2

    当我使用Bundler时,是否需要在我的Gemfile中将其列为依赖项?毕竟,我的代码中有些地方需要它。例如,当我进行Bundler设置时:require"bundler/setup" 最佳答案 没有。您可以尝试,但首先您必须用鞋带将自己抬离地面。 关于ruby-我需要将Bundler本身添加到Gemfile中吗?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/4758609/

  2. ruby - 将 Bootstrap Less 添加到 Sinatra - 2

    我有一个ModularSinatra应用程序,我正在尝试将Bootstrap添加到应用程序中。get'/bootstrap/application.css'doless:"bootstrap/bootstrap"end我在views/bootstrap中有所有less文件,包括bootstrap.less。我收到这个错误:Less::ParseErrorat/bootstrap/application.css'reset.less'wasn'tfound.Bootstrap.less的第一行是://CSSReset@import"reset.less";我尝试了所有不同的路径格式,但它

  3. ruby - Highline 询问方法不会使用同一行 - 2

    设置:狂欢ruby1.9.2高线(1.6.13)描述:我已经相当习惯在其他一些项目中使用highline,但已经有几个月没有使用它了。现在,在Ruby1.9.2上全新安装时,它似乎不允许在同一行回答提示。所以以前我会看到类似的东西:require"highline/import"ask"Whatisyourfavoritecolor?"并得到:Whatisyourfavoritecolor?|现在我看到类似的东西:Whatisyourfavoritecolor?|竖线(|)符号是我的终端光标。知道为什么会发生这种变化吗? 最佳答案

  4. ruby - 检查数组是否在增加 - 2

    这个问题在这里已经有了答案:Checktoseeifanarrayisalreadysorted?(8个答案)关闭9年前。我只是想知道是否有办法检查数组是否在增加?这是我的解决方案,但我正在寻找更漂亮的方法:n=-1@arr.flatten.each{|e|returnfalseife

  5. ruby - 续集在添加关联时访问many_to_many连接表 - 2

    我正在使用Sequel构建一个愿望list系统。我有一个wishlists和itemstable和一个items_wishlists连接表(该名称是续集选择的名称)。items_wishlists表还有一个用于facebookid的额外列(因此我可以存储opengraph操作),这是一个NOTNULL列。我还有Wishlist和Item具有续集many_to_many关联的模型已建立。Wishlist类也有:selectmany_to_many关联的选项设置为select:[:items.*,:items_wishlists__facebook_action_id].有没有一种方法可以

  6. ruby-on-rails - 项目升级后 Pow 不会更改 ruby​​ 版本 - 2

    我在我的Rails项目中使用Pow和powifygem。现在我尝试升级我的ruby​​版本(从1.9.3到2.0.0,我使用RVM)当我切换ruby​​版本、安装所有gem依赖项时,我通过运行railss并访问localhost:3000确保该应用程序正常运行以前,我通过使用pow访问http://my_app.dev来浏览我的应用程序。升级后,由于错误Bundler::RubyVersionMismatch:YourRubyversionis1.9.3,butyourGemfilespecified2.0.0,此url不起作用我尝试过的:重新创建pow应用程序重启pow服务器更新战俘

  7. ruby - 可以通过多少种方法将方法添加到 ruby​​ 对象? - 2

    当谈到运行时自省(introspection)和动态代码生成时,我认为ruby​​没有任何竞争对手,可能除了一些lisp方言。前几天,我正在做一些代码练习来探索ruby​​的动态功能,我开始想知道如何向现有对象添加方法。以下是我能想到的3种方法:obj=Object.new#addamethoddirectlydefobj.new_method...end#addamethodindirectlywiththesingletonclassclass这只是冰山一角,因为我还没有探索instance_eval、module_eval和define_method的各种组合。是否有在线/离线资

  8. ruby - 如何在 Ruby 中向现有方法定义添加语句 - 2

    我注意到类定义,如果我打开classMyClass,并在不覆盖的情况下添加一些东西我仍然得到了之前定义的原始方法。添加的新语句扩充了现有语句。但是对于方法定义,我仍然想要与类定义相同的行为,但是当我打开defmy_method时似乎,def中的现有语句和end被覆盖了,我需要重写一遍。那么有什么方法可以使方法定义的行为与定义相同,类似于super,但不一定是子类? 最佳答案 我想您正在寻找alias_method:classAalias_method:old_func,:funcdeffuncold_func#similartoca

  9. ruby-on-rails - 添加回形针新样式不影响旧上传的图像 - 2

    我有带有Logo图像的公司模型has_attached_file:logo我用他们的Logo创建了许多公司。现在,我需要添加新样式has_attached_file:logo,:styles=>{:small=>"30x15>",:medium=>"155x85>"}我是否应该重新上传所有旧数据以重新生成新样式?我不这么认为……或者有什么rake任务可以重新生成样式吗? 最佳答案 参见Thumbnail-Generation.如果rake任务不适合你,你应该能够在控制台中使用一个片段来调用重新处理!关于相关公司

  10. ruby - 我如何添加二进制数据来遏制 POST - 2

    我正在尝试使用Curbgem执行以下POST以解析云curl-XPOST\-H"X-Parse-Application-Id:PARSE_APP_ID"\-H"X-Parse-REST-API-Key:PARSE_API_KEY"\-H"Content-Type:image/jpeg"\--data-binary'@myPicture.jpg'\https://api.parse.com/1/files/pic.jpg用这个:curl=Curl::Easy.new("https://api.parse.com/1/files/lion.jpg")curl.multipart_form_

随机推荐