php计算时间顺延3分,PHP关于strtotime函数的大坑
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函数的大坑相关推荐
- 面试题:根据Unix时间戳计算时间
根据Unix时间戳计算时间,不分年月大小,每月三十天,每年按360天计算.开始时间1970/01/01 00:00:00,输入秒数,显示时间 思路一:进位,60秒进1分钟,60分进1小时,24小时进1 ...
- 分治法的计算时间、时间复杂度推导以及经典算法分析
分治是一种解决复杂问题的思想,它可以将一个问题划分成多个小的问题,通过合并这些问题求得原问题的解.本文对分治法进行复杂性分析,并通过这种方法分析几个具体算法的时间复杂度. 文章目录 1 分治法的复杂性 ...
- guido python正式发布年份_Python语言适合哪些领域的计算问题? (1.3分)_学小易找答案...
[单选题]关于Python中的复数,下列说法错误的是 (1.3分) [多选题]药物作用的基本规律包括? [单选题]Python 中,以下哪个赋值操作符是错误的? (1.3分) [单选题]哪个选项是下面 ...
- python 计算时间_python的时间使用和时间计算
python存在两个时间类time/dateTime 区别: time:在python文档中,time是归类在常规操作系统服务中,它提供的功能更加接近于操作系统层面.其所能表述的日期范围被限定在197 ...
- python分箱统计个数_使用python 计算百分位数实现数据分箱代码
对于百分位数,相信大家都比较熟悉,以下解释源引自百度百科. 百分位数,如果将一组数据从小到大排序,并计算相应的累计百分位,则某一百分位所对应数据的值就称为这一百分位的百分位数.可表示为:一组n个观测值 ...
- 7-1 计算π的值 (10分)_PTA_Java基础练习
7-1 计算π的值 (10分) 在数学中,我们可以通过π=4╳(1-1/3+1/5-1/7+1/9--1/(2╳n+1)) 来计算,n越大,计算值越靠近.输入正整数n来计算π. 输入样例: 在这里给出 ...
- matlab中计算运行时间的函数,【谁能都我一个计算时间的函数?是计算:例如上午08:00...-计算时间的函数-数学-伊凡渴同学...
概述:本道作业题是伊凡渴同学的课后练习,分享的知识点是计算时间的函数,指导老师为干老师,涉及到的知识点涵盖:[谁能都我一个计算时间的函数?是计算:例如上午08:00...-计算时间的函数-数学,下面是 ...
- 服务器维护 志愿填报时间顺延,因系统维护耽误考生填报,西藏高考志愿填报截止时间顺延两日...
原标题:因系统维护耽误考生填报,西藏高考志愿填报截止时间顺延两日 6月30日,西藏自治区教育考试院官网发布了<关于延长2019年普通高等学校招生志愿填报时间的通知>(以下简称<通知& ...
- 滴滴服务分计算机制,滴滴服务分改版!新功能上线!司机:太好了
原标题:滴滴服务分改版!新功能上线!司机:太好了 日前,滴滴快车服务分全新改版上线 升级后,乘客在完单后三天内(含完单当天) 没有进行投诉或差评的订单 都会按照"默认好评"订单加0 ...
最新文章
- 设计模式(3)-装扮你的类(装饰模式)
- 合作开发用到的几个 设计模式
- 迄今看到的较为客观的一篇分析编程语言的文章
- python注册登录系统_Python实现简单用户注册信息管理系统
- LeetCode 股票买卖问题
- linux 空间不够了,怎么办?Disk Requirements:At least 11MB more space needed on the / filesystem....
- 【机器学习】机器学习从零到掌握之八 -- 教你读懂决策树原理
- 在场景中添加光线——添加HLSL Vertex Shading
- 使用Ruby来实现批量更新AD中字段
- SpringBoot中接口跨域问题
- php 架构师之路ioc讲解
- 传统博物馆的自救之路,名画也变NFT
- 如何在Chrome39添加360抢票王插件
- python 正则表达式 sub_Python 正则表达式:sub
- 人工智能“剧透”《权游》大结局,第一个“领便当”的居然是ta
- 网易云信im 的聊天记录展示
- JSON.stringify()方法时报错 Converting circular structure
- HTML、HTTP、Web综合面试题(三)
- WebGoat v8.1.0 下载安装(windows)
- 自考02323《操作系统概论》第一章操作系统简介——思维导图
热门文章
- Hadoop手动升级HA配置手册
- 目标检测数据集MSCOCO简介
- caffe添加层:Focal Loss的caffe实现
- 如何绘制caffe网络训练曲线
- 深度学习方法(五):卷积神经网络CNN经典模型整理Lenet,Alexnet,Googlenet,VGG,Deep Residual Learning
- NVIDIA DIGITS-2.0 + Ubuntu 14.04 + CUDA 7.0 + cuDNN 7.0 + Caffe 0.13.0环境配置
- LINUX设备模型BUS,DEVICE,DRIVER
- C++for循环中i++与++i的区别
- web项目没有run on server时..
- XMPP协议简单介绍