/**

*根据$endtime,返回指定$monthes月之前的日

*/

function severalMonthAgo($endtime,$monthes){

if (!$endtime) {

return false;

}

if (!is_int($monthes) || $monthes <=0) {

return false;

}

$m = date("m",$endtime);

$y = date("Y",$endtime);

$d = date("d",$endtime);

$year = floor($monthes/12);

$monthes_mod = $monthes%12;

if($year == 0){

//<12个月

if($m < $monthes){

//当前月份小于n月前

$res_y = $y-1;

$res_m = 12-($monthes-$m);

$t = date("t",strtotime($res_y."-".$res_m."-01"));

if($d

$res_d = $d;

}else{

$res_d = $t;

}

}elseif($m == $monthes){

$res_y = $y-1;

$res_m = 12;

$t = date("t",strtotime($res_y."-".$res_m."-01"));

if($d

$res_d = $d;

}else{

$res_d = $t;

}

}elseif($m>$monthes){

$res_y = $y;

$res_m = $m-$monthes;

$t = date("t",strtotime($res_y."-".$res_m."-01"));

if($d

$res_d = $d;

}else{

$res_d = $t;

}

}

}elseif($year>0){

$y = $y-$year;

$monthes = $monthes_mod;

if($m < $monthes){

//当前月份小于n月前

$res_y = $y-1;

$res_m = 12-($monthes-$m);

$t = date("t",strtotime($res_y."-".$res_m."-01"));

if($d

$res_d = $d;

}else{

$res_d = $t;

}

}elseif($m == $monthes){

$res_y = $y-1;

$res_m = 12;

$t = date("t",strtotime($res_y."-".$res_m."-01"));

if($d

$res_d = $d;

}else{

$res_d = $t;

}

}elseif($m>$monthes){

$res_y = $y;

$res_m = $m-$monthes;

$t = date("t",strtotime($res_y."-".$res_m."-01"));

if($d

$res_d = $d;

}else{

$res_d = $t;

}

}

}

return strtotime($res_y."-".$res_m."-".$res_d);

}

/**

*根据$endtime,返回指定$monthes月之前的日

*/

function severalMonthAgoEx($endtime,$monthes){

if (!$endtime) {

return false;

}

if (!is_int($monthes) || $monthes <=0) {

return false;

}

$m = date("m",$endtime);

$y = date("Y",$endtime);

$d = date("d",$endtime);

$year = floor($monthes/12);

$monthes_mod = $monthes%12;

$y -= $year;

//$year =0或>0;

//$monthes_mod =0或>0或

if ($year>0) {

if ($monthes_mod>0) {

$m_diff = 12+$m-$monthes_mod;

$m_diff_div = floor($m_diff/12);

$m_diff_mod = $m_diff%12;

if ($m_diff_div > 0) {

$res_y = $y;

$res_m = $m_diff_mod;

}elseif ($m_diff_div == 0) {

$res_y = $y -1;

$res_m = $m_diff_mod;

}

}elseif ($monthes_mod==0) {

//整除

$res_y = $y;

$res_m = $m;

}

}elseif ($year == 0) {

$m_diff = 12+$m-$monthes_mod;

$m_diff_div = floor($m_diff/12);

$m_diff_mod = $m_diff%12;

if ($m_diff_div > 0) {

$res_y = $y;

}elseif ($m_diff_div == 0) {

$res_y = $y -1;

}

$res_m = $m_diff_mod;

}

$t = date("t",strtotime($res_y."-".$res_m."-01"));

if($d

$res_d = $d;

}else{

$res_d = $t;

}

return strtotime($res_y."-".$res_m."-".$res_d);

}

php指定时间 n天,PHP实现指定时间的n月之前的这一天的两种算法相关推荐

  1. Python中按值来获取指定键的两种方法

    Python字典中的键是唯一的,但不同的键可以对应同样的值,比如说uid,可以是1001.id同样可以是1001.这样的话通过值来获取指定的键,就不止一个!而且也并不太好处理.这里同样提供两种思路来处 ...

  2. mysql 当前时间减指定时间_MySQL实现当前数据表的所有时间都增加或减少指定的时间间隔(推荐)...

    DATE_ADD() 函数向日期添加指定的时间间隔. 当前表所有数据都往后增加一天时间: UPDATE ACT_BlockNum SET CreateTime = DATE_ADD(CreateTim ...

  3. convert.todatetime指定日期格式_JDK1.8新增日期时间类型

    如果我们可以跟别人说:"我们在1502643933071见面,别晚了!"那么就再简单不过了.但是我们希望时间与昼夜和四季有关,于是事情就变复杂了.Java1.0中包含了一个Date ...

  4. oracle job有定时执行的功能,可以在指定的时间点或每天的某个时间点自行执行任务。...

    oracle job有定时执行的功能,可以在指定的时间点或每天的某个时间点自行执行任务. 一.查询系统中的job,可以查询视图 --相关视图 select * from dba_jobs; selec ...

  5. Cookie (设置与读取、超时设置、指定路径、显示用户上次登录时间)

    Cooike简介 Cookie 是在 HTTP 协议下,服务器或脚本可以维护客户工作站上信息的一种方式.Cookie 是由 Web 服务器保存在用户浏览器(客户端)上的小文本文件,它可以包含有关用户的 ...

  6. 获取某一年指定自然周的开始时间和结束时间

    获取某一年指定自然周的开始时间和结束时间 package com.playmath.playmathcrm.util; import java.text.ParseException; import ...

  7. Android 入门第九讲01-音频(本地音乐播放,暂停,继续播放,获取播放时间,快进到指定位置,变速播放,播放data/data/目录下的音频文件,播放网络歌曲)

    Android 入门第九讲01-音频(本地音乐播放,暂停,继续播放,获取播放时间,快进到指定位置,变速播放,播放data/data/目录下的音频文件,播放网络歌曲) 准备 1.储存在raw文件夹 2. ...

  8. 《指定一个用户只能在特定的时间里不能登陆》『罗斌原创』

    <指定一个用户只能在特定的时间里不能登陆> 使用有管理员权限的用户登陆(administrator),进入命令模式下以GUEST这个用户为列 如果需要设置这个GUEST帐户从周一到周五的早 ...

  9. 指定月份获取每周开始和截止时间,不足一周下个月的补足一周,以周六为标准

    package com.deta.demo; import java.text.SimpleDateFormat; import java.util.Calendar; import java.uti ...

  10. 获取指定日期的第二天的凌晨时间 和获取指定时间+获取指定的天数的日期

    获取指定日期的第二天的凌晨时间代码如下: package cn.migu;import java.text.ParseException; import java.text.SimpleDateFor ...

最新文章

  1. Ubuntu 14.04上使用CMake编译MXNet源码操作步骤(Python)
  2. ITK:区域最小图像过滤器
  3. EntityFramework(EF)贪婪加载和延迟加载的选择和使用
  4. ERP CRM与SCM整合过程中的知识转移
  5. 如何在单个测试中同时执行多个断言
  6. skype linux 安装,Ubuntu 12.04 AMD64 安装 Skype
  7. 15 并发编程-(IO模型)
  8. 干货 | 懂点儿经济学有什么用?
  9. 阿里巴巴云原生大数据运维平台 SREWorks 正式开源
  10. 许家印砸1000亿布局AI、量子计算等领域,但在科技圈只能算轻壕
  11. slack 团队协作平台
  12. HDU_1198 Farm Irrigation(并查集)
  13. linux wine-qq介绍2009版QQ精简
  14. 如何使div 上下左右居中 css
  15. 【Leetcode 刷题题解】python语言+最优美解答+由易到难
  16. 3 非齐次线性微分方程与无量纲化
  17. SECTION 24 面向对象编程(三)
  18. Google全系列产品不再信任赛门铁克某款根证书-转载
  19. python中采用字典建立统_Python字典的基本使用
  20. 自由职业的 6 条建议

热门文章

  1. .NET根本权限管理框架源代码
  2. .net获取当前网址url
  3. iOS系统自带正则表达式简单运用
  4. SQL Server错误代码及解释(一)
  5. [web]EL表达式失效
  6. Spring Data Rest如何暴露ID字段
  7. NOIP模拟题——tractor
  8. SQLserver查询练习
  9. C# 调用C++DLL注意事项
  10. 2006年年度应用服务器中间件产品评述