2020/04/30 早上上班的时候看到系统里过去半年每个月账单记录里,出现了两次202003,少了202002的记录,比较奇怪就查了下前端代码,是从后端php使用strtotime获取的。

项目中使用了如下的代码来获取过去半年的月份,然后通过这六个月份来依次查账单:

this->month = array(

date('Ym'),

date('Ym',strtotime('last month')),

date('Ym',strtotime('2 months ago')),

date('Ym',strtotime('3 months ago')),

date('Ym',strtotime('4 months ago')),

date('Ym',strtotime('5 months ago')),

date('Ym',strtotime('6 months ago')),

);

比较疑惑为什么会获取到两次2020年3月,就测试了下strtotime这个方法的last month;发现这个方法有一个大坑就是他并不会判断大月小月,更不会判断闰年平年,而是默认直接给当前的月份数字减一;在大月的最后一天,以及闰年的二月最后一天等特殊日期均会出现类似bug。

对该函数做了一次完整测试,结果如下图:

strtotime相关测试结果

可以看到3月30日的一个月前2月30日,但2020年2月只有29日所以直接被顺延到3月1日,然后再次取回Ym就变成了3月的前一个月还是3月。

查了一下相关资料,php对此给出的解决办法是在php版本5.3之后date新增了一系列修正的短语来明确这个问题,那就是'the first day of'和‘the last day of’,如图中的

m4表示的,就能够正确的把4月30日的两个月前指向2月29日,然后使用Ym可表示为202002,即可正确获取到想要的结果。如下图:

php 5.3之后可用的解决办法

这样就能够解决大小月和平闰年带来的月份问题了。

php计算时间顺延3分,PHP关于strtotime函数的大坑相关推荐

  1. 面试题:根据Unix时间戳计算时间

    根据Unix时间戳计算时间,不分年月大小,每月三十天,每年按360天计算.开始时间1970/01/01 00:00:00,输入秒数,显示时间 思路一:进位,60秒进1分钟,60分进1小时,24小时进1 ...

  2. 分治法的计算时间、时间复杂度推导以及经典算法分析

    分治是一种解决复杂问题的思想,它可以将一个问题划分成多个小的问题,通过合并这些问题求得原问题的解.本文对分治法进行复杂性分析,并通过这种方法分析几个具体算法的时间复杂度. 文章目录 1 分治法的复杂性 ...

  3. guido python正式发布年份_Python语言适合哪些领域的计算问题? (1.3分)_学小易找答案...

    [单选题]关于Python中的复数,下列说法错误的是 (1.3分) [多选题]药物作用的基本规律包括? [单选题]Python 中,以下哪个赋值操作符是错误的? (1.3分) [单选题]哪个选项是下面 ...

  4. python 计算时间_python的时间使用和时间计算

    python存在两个时间类time/dateTime 区别: time:在python文档中,time是归类在常规操作系统服务中,它提供的功能更加接近于操作系统层面.其所能表述的日期范围被限定在197 ...

  5. python分箱统计个数_使用python 计算百分位数实现数据分箱代码

    对于百分位数,相信大家都比较熟悉,以下解释源引自百度百科. 百分位数,如果将一组数据从小到大排序,并计算相应的累计百分位,则某一百分位所对应数据的值就称为这一百分位的百分位数.可表示为:一组n个观测值 ...

  6. 7-1 计算π的值 (10分)_PTA_Java基础练习

    7-1 计算π的值 (10分) 在数学中,我们可以通过π=4╳(1-1/3+1/5-1/7+1/9--1/(2╳n+1)) 来计算,n越大,计算值越靠近.输入正整数n来计算π. 输入样例: 在这里给出 ...

  7. matlab中计算运行时间的函数,【谁能都我一个计算时间的函数?是计算:例如上午08:00...-计算时间的函数-数学-伊凡渴同学...

    概述:本道作业题是伊凡渴同学的课后练习,分享的知识点是计算时间的函数,指导老师为干老师,涉及到的知识点涵盖:[谁能都我一个计算时间的函数?是计算:例如上午08:00...-计算时间的函数-数学,下面是 ...

  8. 服务器维护 志愿填报时间顺延,因系统维护耽误考生填报,西藏高考志愿填报截止时间顺延两日...

    原标题:因系统维护耽误考生填报,西藏高考志愿填报截止时间顺延两日 6月30日,西藏自治区教育考试院官网发布了<关于延长2019年普通高等学校招生志愿填报时间的通知>(以下简称<通知& ...

  9. 滴滴服务分计算机制,滴滴服务分改版!新功能上线!司机:太好了

    原标题:滴滴服务分改版!新功能上线!司机:太好了 日前,滴滴快车服务分全新改版上线 升级后,乘客在完单后三天内(含完单当天) 没有进行投诉或差评的订单 都会按照"默认好评"订单加0 ...

最新文章

  1. 设计模式(3)-装扮你的类(装饰模式)
  2. 合作开发用到的几个 设计模式
  3. 迄今看到的较为客观的一篇分析编程语言的文章
  4. python注册登录系统_Python实现简单用户注册信息管理系统
  5. LeetCode 股票买卖问题
  6. linux 空间不够了,怎么办?Disk Requirements:At least 11MB more space needed on the / filesystem....
  7. 【机器学习】机器学习从零到掌握之八 -- 教你读懂决策树原理
  8. 在场景中添加光线——添加HLSL Vertex Shading
  9. 使用Ruby来实现批量更新AD中字段
  10. SpringBoot中接口跨域问题
  11. php 架构师之路ioc讲解
  12. 传统博物馆的自救之路,名画也变NFT
  13. 如何在Chrome39添加360抢票王插件
  14. python 正则表达式 sub_Python 正则表达式:sub
  15. 人工智能“剧透”《权游》大结局,第一个“领便当”的居然是ta
  16. 网易云信im 的聊天记录展示
  17. JSON.stringify()方法时报错 Converting circular structure
  18. HTML、HTTP、Web综合面试题(三)
  19. WebGoat v8.1.0 下载安装(windows)
  20. 自考02323《操作系统概论》第一章操作系统简介——思维导图

热门文章

  1. Hadoop手动升级HA配置手册
  2. 目标检测数据集MSCOCO简介
  3. caffe添加层:Focal Loss的caffe实现
  4. 如何绘制caffe网络训练曲线
  5. 深度学习方法(五):卷积神经网络CNN经典模型整理Lenet,Alexnet,Googlenet,VGG,Deep Residual Learning
  6. NVIDIA DIGITS-2.0 + Ubuntu 14.04 + CUDA 7.0 + cuDNN 7.0 + Caffe 0.13.0环境配置
  7. LINUX设备模型BUS,DEVICE,DRIVER
  8. C++for循环中i++与++i的区别
  9. web项目没有run on server时..
  10. XMPP协议简单介绍