/**
* 获取一段时间内(可跨年),以季度为单位,第N天在各个季度是几月几号
* @param $sTime 时间戳
* @param $eTime 时间戳
* @param $number 第N天
* @return array
* @author fengzi
* @date 2022-11-17 21:16
*/
public function getQuarterDate($sTime, $eTime, $number) {
$dates = [];
$sDate = date('Y-m-d', $sTime);
$eDate = date('Y-m-d', $eTime);
for( $i = $sTime; $i <= $eTime; $i = strtotime('+3 month', $i) )
{
$tempNumber = $number;
$monthNum = date('n', $i);
$yearNumber = date('Y', $i);
//获取所在季度的第一个月份
$startMonthNumber = (($this->getQuarterByMonth($monthNum) - 1) * 3) + 1; if ( isset($dayCountByYear[$yearNumber]) ) {
$dayCountByMonth = $dayCountByYear[$yearNumber];
} else {
//获取当前年份的各个月份的天数
$dayCountByMonth = $this->getMonthDays($yearNumber);
$dayCountByYear[$yearNumber] = $dayCountByMonth;
} for ($j=$startMonthNumber; $j<=($startMonthNumber+2); $j++) {
$diff = bcsub($tempNumber, $dayCountByMonth[$j]);
if ( $diff > 0 ) {
$tempNumber = $diff;
} elseif ( $diff <= 0 ) {
$jMonth = str_pad($j, 2, '0', STR_PAD_LEFT);//补充前导零
$tempNumber = str_pad($tempNumber, 2, '0', STR_PAD_LEFT); //补充前导零
$tempDate = $yearNumber.'-'.$jMonth.'-'.$tempNumber;
if ( $sDate <= $tempDate && $tempDate <= $eDate ) {
$dates[$yearNumber][] = $tempDate;
}
break;
}
}
} return $dates;
} /**
* 获取一段时间内(可跨年),以月为单位,第N天在各个月份是几月几号
* @param $sTime 时间戳
* @param $eTime 时间戳
* @param $number 第N天
* @return array
* @author fengzi
* @date 2022-11-18 18:41
*/
public function getMonthDate($sTime, $eTime, $number)
{
$dates = []; for( $i = $sTime; $i <= $eTime; $i = strtotime('+1 month', $i) )
{
$yearNumber = date('Y', $i);
if ( isset($dayCountByYear[$yearNumber]) ) {
$dayCountByMonth = $dayCountByYear[$yearNumber];
} else {
$dayCountByMonth = $this->getMonthDays($yearNumber);
$dayCountByYear[$yearNumber] = $dayCountByMonth;
} //获取当前时间的月份
$monthNumber = date('n', $i);
$oneMonthTotalNum = $dayCountByMonth[$monthNumber]; if ( $i == $sTime ) {
//获取当前时间的天(几号)
$sDay = date('j', $sTime);
if ( $number >= $sDay && $sDay <= $oneMonthTotalNum ) {
$dates[$yearNumber][] = $yearNumber.'-'.$monthNumber.'-'.$number;
}
} elseif ( $i == $eTime ) {
//获取当前时间的天(几号)
$eDay = date('j', $eTime);
if ( $number <= $eDay && $eDay >=1 ) {
$dates[$yearNumber][] = $yearNumber.'-'.$monthNumber.'-'.$number;
}
} else {
if ( 1 <= $number && $number <=$oneMonthTotalNum ) {
$dates[$yearNumber][] = date('Y-m-'.$number, $i);
}
}
} return $dates;
}   /**
* 获取某年的各个月份分别有几天
* @param $year 年份,如:2022
* @return array   输入年份的每个月的天数
* @author fengzi
* @date 2022-11-18 18:38
*/
public function getMonthDays($year)
{
$dayCountByMonth = []; for ($i=1; $i<=12; $i++) {
$dayCountByMonth[$i] = date("t", strtotime($year . "-" . $i . "-01"));
} return $dayCountByMonth;
} /**
* 获取月份所在季度的第一个月份
* @param $monthNumber
* @return int
* @author fengzi
* @date 2022-11-17 20:57
*/
public function getQuarterByMonth($monthNumber) {
return floor(($monthNumber - 1) / 3) + 1;
}

获取一段时间内,以月/季度为单位,第N天在各个月/季度是几几年几月几号的更多相关文章

  1. oracle获取一段时间内所有的小时、天、月

    获取一段时间内所有的小时 ) sdate FROM dual CONNECT ; 获取一段时间内所有的天 sdate FROM dual CONNECT ; from user_objects whe ...

  2. java根据日期获取周几和获取某段时间内周几的日期

    整理两个日期的方法. 根据日期获取当天是周几 /** * 根据日期获取当天是周几 * @param datetime 日期 * @return 周几 */ public static String d ...

  3. Java 获取一段时间内的每一天

    有时候我们会遇到一些业务场景,需要去获取一段时间内的每一天日期 public static List<Date> findDates(Date dBegin, Date dEnd) { L ...

  4. PHP获取一段时间内的每个周几, 每月几号, 遇到特殊日子就往后延

    2016年11月1日 16:18:19 星期二 主要用到的函数是 strtotime() strtotime('+1 Tuesday', $timestamp) 获取下周二, 从时间戳$timesta ...

  5. java获取某段时间内的月份列表

    /**获取两个时间节点之间的月份列表**/ private static List<String> getMonthBetween(String minDate, String maxDa ...

  6. JS 获取一段时间内的工作时长小时数

    本来想是想找轮子的,但是并没有找到能用的,多数都是问题很大,所以就自己写了一个 需求说明 支持自选时间段,即开始时间与结束时间根据用户的上班及下班时间判定返回小时数 技术栈 moment.js 思考过 ...

  7. 用sql获取一段时间内的数据

    我把我CSDN写的   搬来博客园了.. SELECT * FROM 表名 WHERE timestampdiff(MINUTE, SYSDATE(), send_time) <=60 AND ...

  8. mysql 获取一段时间的数据

    用 sql 获取一段时间内的数据: SELECT * FROM EDI.edi_history WHERE timestampdiff(day, SYSDATE(), create_time_loc) ...

  9. 利用zabbix API 统计一段时间内监控项的均值和峰值

    #coding:utf-8 #给定主机IP获取一段时间内cpu的均值和峰值并写入文件(txt,可以跑完后直接把后缀名改为csv以表格形式打开):需要指定IP文件 import requests imp ...

  10. java 求取某一段时间内的每一天、每一月、每一年

    1.求取某一段时间内的每一天 Date date0 = new SimpleDateFormat("yyyy-MM-dd").parse("2014-01-01" ...

随机推荐

  1. 手撕Vue-监听数据变化

    经过上一篇的介绍,已经实现了将模板编译成具体数据,接下来要介绍的是如何监听数据的变化,本章主要完成这个需求即可. 在我们文章的开始,我写了一个 Vue 双向数据绑定原理的文章当中封装了一个 Obser ...

  2. 设计模式学习-使用go实现组合模式

    组合模式 定义 适用范围 优点 缺点 代码实现 参考 组合模式 定义 组合模式(Composite),将对象组合成树形结构以表示'部分-整体'的层次关系.组合模式使得用户对单个对象和组合对象的使用具有 ...

  3. Python 基础知识点归纳

    Python 是一种跨平台的计算机程序设计语言,是一种面向对象的动态类型语言,笔记内容包括编译安装python,python列表,字典,元组,文件操作等命令的基本使用技巧. 编译安装 Python P ...

  4. 【二叉树】二叉树的深度优先遍历DFS(前中后序遍历)和广度优先遍历BFS(层序遍历)详解【力扣144,94,145,102】【超详细的保姆级别教学】

    [二叉树]二叉树的深度优先遍历(前中后序遍历)和广度优先遍历(层序遍历)详解[超详细的保姆级别教学] 先赞后看好习惯 打字不容易,这都是很用心做的,希望得到支持你 大家的点赞和支持对于我来说是一种非常 ...

  5. ABC311_g One More Grid Task 题解

    题目链接:Atcoder 或者 洛谷 对于解决二维区间内的最值类型问题,我们常常有一类特别好用的方法,就是悬线法,它可以看做是单调栈的子集,但更加好理解和书写. 对于悬线法,我们有一个常见的模型,找出 ...

  6. 小知识:MySQL配置文件优先级

    今天在RHEL7上,严格按之前的安装规范文档,部署MySQL环境时,发现通过服务的方式启动MySQL失败: 关键错误是: log-error set to '/var/log/mariadb/mari ...

  7. 时间减去一个小时怎么做 delphi 很方便 看代码

    procedure TfrmTongBuTid.Button1Click(Sender: TObject); begin TopStartModifiedTime_dtp.Time := TopSta ...

  8. ABC 309

    直接从 F 开. F 三维偏序. 把盒子按 \(h_i\) 排序,离散化,正常跑三维偏序(注意不能相等). 还要处理 \(h_i\) 相等的情况,可以再把 \(h_i\) 从大到小排序,然后 \(w_ ...

  9. Smartctrl 命令使用说明

    一.smartctl工具简介  Smartmontools是一种硬盘检测工具,通过控制和管理硬盘的SMART(Self Monitoring Analysis and Reporting Techno ...

  10. Spring Cloud Gateway微服务网关快速入门

    介绍 Spring Cloud Gateway 是 Spring 官方基于 Spring 5.0,Spring Boot 2.0 和 Project Reactor 等技术开发的网关,Spring C ...