php strtotime month bug,处理PHP strtotime的BUG

9fc6819bf58c7264db842024bd5ce119.png

PHP strtotime的BUG处理

最近使用了strtotime结合-1 month, +1 month, next month获取上个月或者下个月的日期,不过刚看到一篇文章,才知道原来使用strtotime直接获取日期还是有点小BUG

BUG

如日期:$today = '2020-12-31';

echo date("Y-m-d",strtotime("$today -1 month"))

输出2020-12-01

根据上面的输出可以看出来,输出的还是2020年12月

分析:

先做-1 month, 那么当前是07-31, 减去一以后就是06-31.

再做日期规范化, 因为6月没有31号, 所以就好像2点60等于3点一样, 6月31就等于了7月1

是不是逻辑很”清晰”呢? 我们也可以手动验证第二个步骤, 比如:var_dump(date("Y-m-d", strtotime("2020-12-31")));

// 输出2020-12-01

也就是说, 只要涉及到大小月的最后一天, 都可能会有这个迷惑, 我们也可以很轻松的验证类似的其他月份, 印证这个结论:var_dump(date("Y-m-d", strtotime("-1 month", strtotime("2020-12-31"))));

// 输出2020-12-03

var_dump(date("Y-m-d", strtotime("+1 month", strtotime("2020-08-31"))));

// 输出2020-10-01

var_dump(date("Y-m-d", strtotime("next month", strtotime("2020-01-31"))));

// 输出2020-03-03

var_dump(date("Y-m-d", strtotime("last month", strtotime("2020-03-31"))));

// 输出2020-03-03

解决方案

从PHP5.3开始呢, date新增了一系列修正短语, 来明确这个问题, 那就是”first day of” 和 “last day of”, 也就是你可以限定好不要让date自动”规范化”:var_dump(date("Y-m-d", strtotime("last day of -1 month", strtotime("2020-03-31"))));

//输出2020-02-28

var_dump(date("Y-m-d", strtotime("first day of +1 month", strtotime("2020-08-31"))));

//输出2020-09-01

var_dump(date("Y-m-d", strtotime("first day of next month", strtotime("2020-01-31"))));

//输出2020-02-01

var_dump(date("Y-m-d", strtotime("last day of last month", strtotime("2020-03-31"))));

//输出2020-02-28

那如果是5.3之前的版本, 可以使用mktime之类的, 把所有的日子忽略掉, 比如都限定为每月1号就可以了, 只不过就不如直接用first day来的更加优雅.

推荐教程:《PHP视频教程》

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/340456.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JMetro版本11.5.11和8.5.11发布

你好 具有新JMetro样式的另一个版本(深色和浅色版本): 分割菜单按钮 分割窗格 药丸按钮/分段按钮 调整现有样式和错误修复。 继续阅读以获取详细信息。 分割菜单按钮 以下是一个动画,显示了新的“拆分菜单按钮” JMetro浅色…

python远程连接mysql数据库_MySQL数据库之python mysql远程连接

本文主要向大家介绍了MySQL数据库之python mysql远程连接 ,通过具体的内容向大家展现,希望对大家学习MySQL数据库有所帮助。第一步:vim /etc/MySQL/my.cnf找到bind-address 127.0.0.1注释掉这行,如:#bind-address 12…

php100并发cpu告警,多线程并发导致CPU100%的一种原因和解决办法

在用自定义线程池的时候,遇到cpu100%,经过验证后,发现问题来源于我定义的子线程。子线程的主要功能是从任务队列(LinkedBlockingQueue)里面持续拿出任务,并且执行。以下为令CPU100的代码。private class WorkThread extends Threa…

excel离散度图表怎么算_一般人不知道的几个excel制图技巧

原标题:一般人不知道的几个excel制图技巧作者:杜雨 公众号:数据小魔方(datamofang)今天这篇,我专注于Excel的作图规则,深入的研究下Excel由数据源到可视化图表之间的关系是如何对应的,倘若你已经在工作中横…

listview控件在php的使用方法,Android_Android编程之控件ListView使用方法,本文实例讲述了Android编程之控 - phpStudy...

Android编程之控件ListView使用方法本文实例讲述了Android编程之控件ListView使用方法。分享给大家供大家参考。具体分析如下:控件ListView是一个重要的控件,可以被用作用户列表等显示,下面进行它的操作测试。下面代码实现了生成了一个ListVi…

使用ElasticSearch进行近实时索引

选择索引策略很困难。 Elasticsearch 文档的确有一些一般性建议 ,并且有其他公司的 一些技巧 ,但这也取决于特定的用例。 在典型情况下,您有一个数据库作为事实的来源,并且有一个使事物可搜索的索引。 您可以采用以下策略&#xf…

air什么意思中文_Air 的中文意思是什么?

展开全部air释义:(1)作为名词,空气;32313133353236313431303231363533e59b9ee7ad9431333431366261天空;(飞行的)空中。(2)作为动词,晾;晾干;(使)通风;公开发表。读音:英[…

python xlutils函数,python3:xlrd、xlwt、xlutils处理excel文件

1.xlrd读取excel请参考上篇博客https://www.cnblogs.com/shapeL/p/9075843.html2.xlwt生成excel安装下载:pip install xlwt导入:import xlwt参考:生成excel文件test1.xlsfile_name ../dataconfig/test1.xlswbk xlwt.Workbook() #初始化work…

前端实现炫酷动效_20个网页动效设计的炫酷神器

如今很多 UI 设计师不是正在做动效,就正在学着做动效。动效现在已经无处不在了。有的动效可能是一个微妙的悬停效果,使用 Bttn.css 或者是 Hover Buttons 的帮助下,添加到按钮上,有的则可能是使用引人瞩目的动态渐变背景抓住用户的…

php7设置最大连接数,sybase 15.7 修改 number of user connections 最大连接数

sp_configure number of user connectionssp_configure number of user connections,200修改Sybase最大连接数的方法有两种,如下:一、 进Sybase central, 鼠标右键选择数据库服务器(要处理的服务器),然后选择右键菜单中的配置选项&#xff0c…

jsr303 自定义消息_JSR 303从I18N属性文件加载消息

jsr303 自定义消息总览 本文将说明如何适应JSR 303验证API来从I18n属性文件加载消息,并通过保留国际化的所有好处和对多种语言的支持来实现这一点。 为此,我们将实现一个基于Spring API的自定义MessageInterpolator,用于管理I18N消息。 依存…

最优隐神经元数目 算法 matlab,BP算法的改进在Matlab的实现研究

BP 算法的改进在M a tlab 的实现研究姚文俊(中南民族大学电子信息工程学院 湖北武汉 430074)摘 要:利用M atlab 中的神经网络工具箱提供的丰富网络学习和训练函数,对BP 网络和BP 算法的优化方案进行仿真,得到较优的BP 算法。关键词:人工神经网络;BP 网络;M atlab ;N eu ral …

php 导出excel分段导出_PHP 导出excel 数据量大时

public functionceshiexcel1(){set_time_limit(0);$filename 病毒日志;header(Content-Type: application/vnd.ms-excel);header(Content-Disposition: attachment;filename".$filename..csv");header(Cache-Control: max-age0);//原生链接mysql//数据库配置$mysql_…

通过Apache Kafka集成流式传输大数据

从实时实时过滤和处理大量数据,到将日志数据和度量数据记录到不同来源的集中处理程序中,Apache Kafka日益集成到各种系统和解决方案中。 使用CData Sync ,可以轻松地将此类解决方案应用于任何CRM,ERP或Analytics软件。 配置Apach…

php7 获取数据流,stream_socket_accept()

stream_socket_accept()(PHP 5, PHP 7)接受由stream_socket_server()创建的套接字连接说明stream_socket_accept(resource$server_socket[,float$timeout ini_get("default_socket_timeout")[,string&$peername]]):resource接受由stream_socket_server()创建的套…

浪潮as5300技术方案_浪潮智能存储AS5300G2双活解决方案

智慧医疗已成为提高就医效率、减少医疗差错的有效科技手段。江西省泰和中医院通过采用浪潮智能存储AS5300G2双活解决方案,构筑了一个满足医院数字化、信息化、智能化、可持续发展的信息支撑系统平台,使业务数据有保障、资源调配共享更高效、运维管理更方…

安卓php推送消息机制,深入剖析Android消息机制原理

在Android中,线程内部或者线程之间进行信息交互时经常会使用消息,这些基础的东西如果我们熟悉其内部的原理,将会使我们容易、更好地架构系统,避免一些低级的错误。在学习Android中消息机制之前,我们先了解与消息有关的…

python单元测试mock_Mock 在 Python 单元测试中的使用

本文讲述的是 Python 中 Mock 的使用。如何执行单元测试而不用考验你的耐心很多时候,我们编写的软件会直接与那些被标记为“垃圾”的服务交互。用外行人的话说:服务对我们的应用程序很重要,但是我们想要的是交互,而不是那些不想要…

php bin2hex(),PHP bin2hex() 函数 pack() 函数

bin2hex() 函数bin2hex() 函数把 ASCII 字符的字符串转换为十六进制值。字符串可通过使用 pack() 函数再转换回去。语法bin2hex(string)string必需。要转换的字符串。示例一把 "Shanghai" 转换为十六进制值$str bin2hex("Shanghai");echo($str); // 53686…

java 泛型示例_使用Java泛型的模板方法模式示例

java 泛型示例如果您发现除了某些部分外,您的许多例程完全相同,那么您可能需要考虑使用Template Method来消除容易出错的代码重复 。 这是一个示例:下面是两个做类似事情的类: 实例化并初始化Reader以从CSV文件读取。 阅读每一行…