php开发过程中,经常会用到一些针对日期、时间、时间戳的转换获取等操作,如下个月第一天啊,上周啊,每个月第三天啊;形式多样,层出不穷。然而,具体到应用时,总想不起具体使用方式,查询网上总没有一个非常全面的整理。不论是博客上还是官网上,都不全面,有的只是文字说明,有的只是简单实例,都不具有实战性。
基于此,整理本文;本文几乎全部是实例;看着非常方便。

//时间戳加减时间段,day,week,month,year是否带s都可以,与前面的数字是否有空格也都可以。
//因此,这个strtotime对格式要求不严格
$tt=strtotime("+3 days",$time);//$time 3天之后的时间戳
$tt=strtotime("+6 month",$time);//$time6个月之后的时间戳
$tt=strtotime("+1 year 6 months",$time);//指定时间戳1年6个月后的时间戳$t=time();//当前时间:1545184219,2018-12-19上午9点50
echo strtotime(date('Y-m-01', $t));//结果是:1543593600(2018/12/1 0:0:0)
echo strtotime(date('Y-m-10', $t));//结果是:1544371200(2018/12/10 0:0:0)
echo strtotime(date('Y-m-d 8:0:0', $t));//结果是:1545177600(2018/12/19 8:0:0)
echo strtotime(date("Y-m-d",time()).' 23:59:59');//当天23:59:59的INT类型时间戳
echo strtotime(date("Y-m-t", $tt1).' 23:59:59');//根据某一时间戳获取当月最后的时间戳$t0 = strtotime(date('Y-m-01', strtotime('-1 month', $t)));//上月起点
$t1 = strtotime(date('Y-m-01'));//本月起点
$t2 = strtotime(date('Y-m-t 23:59:59'));//本月终点//关于生日判断
$shengri='1986-01-06';
$date=date("m-d",strtotime($shengri));//结果是:01-06
$t_date=strtotime(date('Y-'.$date.'8:0:0', time()));//结果是:1546732800(2019/1/6 8:0:0)

关于strtotime()出现的一些奇怪的问题

date("Y-m-d",strtotime("-1 month"))//如果当前是2018-07-31,则输出2018-07-01
var_dump(date("Y-m-d", strtotime("2017-06-31")));//输出2017-07-01

虽然这个问题看起来很迷惑, 但从内部逻辑上来说呢, 其实是"没问题"的,因为这样:
我们来模拟下date内部的对于这种事情的处理逻辑:
1. 先做-1 month, 那么当前是07-31, 减去一以后就是06-31.
2. 再做日期规范化, 因为6月没有31号, 所以就好像2点60等于3点一样, 6月31就等于了7月1

也就是说, 只要涉及到大小月的最后一天, 都可能会有这个迷惑, 我们也可以很轻松的验证类似的其他月份, 印证这个结论:

var_dump(date("Y-m-d", strtotime("-1 month", strtotime("2017-03-31"))));
//输出2017-03-03
var_dump(date("Y-m-d", strtotime("+1 month", strtotime("2017-08-31"))));
//输出2017-10-01
var_dump(date("Y-m-d", strtotime("next month", strtotime("2017-01-31"))));
//输出2017-03-03
var_dump(date("Y-m-d", strtotime("last month", strtotime("2017-03-31"))));
//输出2017-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("2017-03-31"))));
//输出2017-02-28
var_dump(date("Y-m-d", strtotime("first day of +1 month", strtotime("2017-08-31"))));
//输出2017-09-01
var_dump(date("Y-m-d", strtotime("first day of next month", strtotime("2017-01-31"))));
//输出2017-02-01
var_dump(date("Y-m-d", strtotime("last day of last month", strtotime("2017-03-31"))));
//输出2017-02-28

php时间戳,日期时间转换及使用大全相关推荐

  1. java calendar格式化_Java:日期时间转换与格式化

    Java:日期时间转换与格式化 2020-08-12 21:28:58 一.Java中时间类 1.Date类 Date常用的构造函数: Date()生成一个代表当前日期时间的Date对象,相当于Dat ...

  2. es6 日期字符串转日期_Pandas核心能力9:日期时间转换、提取、筛选

    Pandas核心能力9:日期时间转换.提取.筛选 In [1]: import numpy as npimport pandas as pddatetime_index = pd.date_range ...

  3. Java时间工具类(把日期时间转换成xx秒前、xx分钟前、xx小时前...)

    Java时间工具类(把日期时间转换成xx秒前.xx分钟前.xx小时前...) package com.liuzy.javaopen.entity; import java.text.ParseExce ...

  4. 时间戳与时间转换、js时间戳判定是 今天、昨天还是更前的日子

    //1. js时间戳判定是否是 -1 今天 0 昨天 1更前的日子 console.log(_GetDateStr(1572431608)) //2019-10-30 18:40:04 functio ...

  5. VB.NET中的日期时间转换

    刚刚学习VB.NET不久,在做几个小例子的时候发现经常要对日期时间和字符串之间进行转换,现整理如下,如有不正确的地方请大家指出. ----------------------------------- ...

  6. oracle的日期时间转换日期,oracle 的时间日期转换函数

    http://hi.baidu.com/cuigq_hr/blog/item/ba2bc167ed79022eaa184c34.html 1.有sysdate转换后的日期的例子总结: select t ...

  7. Java小记 —— 日期时间转换问题(相差一小时)

    日期操作的时候经常会在字符串.毫秒和日期对象间转换,而且很多人都使用joda time库进行操作,这就会遇到以下说的问题(相信很多人也遇到了):就是对于某些特殊的日期,转换的时候会报错,或者出现转换不 ...

  8. python时间戳转换成时间_Python 时间戳/字符串/时间 转换

    概要 平时对于时间的处理经常使用python的time和datetime模块,但是用来多次还是对其中的时间戳,字符串和时间转换应用的不太熟练,时间长了不使用就理不清楚,为此整理成文. 视图 时间戳,时 ...

  9. oracle格式化列宽度,ORACLE日期时间的格式化参数大全

    经常遇到有朋友问询关于日期时间格式化的问题(或可以通过格式化轻易解决),经过参考Oracle SQL Reference官方文档,并附上详细的应用示例综合成文,希望能够对大家学习和使用有所帮助.本篇可 ...

最新文章

  1. android 开启一个定时线程_ANDROID开发中定时器的3种方法
  2. 【Joomla】TinyMCE - Add custom styles
  3. ExtJS FormPanel不执行校验
  4. HD 1525 Euclid's Game
  5. python爬虫资源大全_Python爬虫抓取纯静态网站及其资源(基础篇)
  6. oracle内连接使用,Oracle中的联合查询-自然连接/外连接/内连接
  7. setjump和longjump
  8. innodb是如何存数据的?yyds
  9. 第21课 田忌赛马 《小学生C++趣味编程》
  10. mysql semi join_技术分享 | MySQL 子查询优化
  11. 原生体验挡不住!JavaScript开源跨平台框架NativeScript
  12. python命名元组namedtuple_Python命名元组--命名元组,Pythonnamedtuple,具名
  13. 如何总结和整理学术文献?
  14. 【C++设计模式】抽象工厂模式
  15. 法向量变换矩阵的推导
  16. python学习:包导入教程
  17. 顺序结构程序设计(顺序结构与选择结构)
  18. 下面有关java final的基本规则,描述错误的是?
  19. MATLAB交换图片红绿颜色通道,matlab的颜色映射colormap
  20. 用CSS画一只哆啦A梦

热门文章

  1. Pause Giant AI Experiments: An Open Letter(暂停大型人工智能实验: 一封公开信)
  2. 【Grasshopper基础8】电池的序列化与反序列化 Serilization of Grasshopper Component
  3. 回顾2022年计算机视觉领域最激动人心的进展
  4. 全志F1C芯片参数对比,供查阅
  5. Next() Nextline() hasNext()区别
  6. Elasticsearch 压测方案之 es rally 简介
  7. 关于商业智能BI,今天只谈这五点
  8. 录音文件下载_录音转文字app有哪些?录音转文字助手怎么样?
  9. Angular 4 Router
  10. windows7环境下theano安装