/**
* 获取一段时间内(可跨年),以季度为单位,第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. 驱动开发:WinDBG 常用调试命令总结

    Windbg是Microsoft公司免费调试器调试集合中的GUI的调试器,支持Source和Assembly两种模式的调试.Windbg不仅可以调试应用程序,还可以进行Kernel Debug.结合M ...

  2. Firefox浏览器的一些配置

    一.在新标签页打开书签 1.打开Firefox浏览器,地址栏输入about:config. 2.选择"接受风险并继续". 3.搜索browser.tabs.loadBookmark ...

  3. 火山引擎ByteHouse:分析型数据库如何设计并发控制?

    更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 分析型数据库设计并发控制的主要原因是为了确保数据的完整性和一致性,同时提高数据库的吞吐量和响应速度.并发控制可以防 ...

  4. 基本数据类型(primitive type)

    数据类型 数据类型分为基本数据类型(primitive type)和引用数据类型(reference type) 基本数据类型(primitive type) 数值类型 整数类型 浮点类型 字符类型 ...

  5. 【Flink入门修炼】1-2 Mac 搭建 Flink 源码阅读环境

    在后面学习 Flink 相关知识时,会深入源码探究其实现机制.因此,需要现在本地配置好源码阅读环境. 本文搭建环境: Mac M1(Apple Silicon) Java 8 IDEA Flink 官 ...

  6. SOCKS5协议解析

    socks的官方文档:https://www.ietf.org/rfc/rfc1928.txt 本文改变其他作者之手,在原文基础上加入客户端的编写,完善了服务端代码,原文是Linux端的程序代码,本文 ...

  7. DHCP中继代理配置与管理

    实验介绍:DHCP中继存在目的 当一台DHCP需要配置不同网段的IP地址时 一:前期准备 1.在DHCP服务器配置页面 右键ipv4,建立多个作用域. 我这里设置了三个可以分配给服务器端的网段,分别是 ...

  8. ABC 310

    E \(dp[i][j]\) 表示前 \(i\) 个里有多少个后缀答案为 \(j\). \(if (c[i] == '0') \{\) \(dp[i][0] = 1;\) \(dp[i][1] = d ...

  9. 你应该知道的提升Visual Studio开发能力的5个技巧

    如果你像我一样,或许你也沉迷于开发者工具.这就是我喜欢 Visual Studio 的原因之一--它有无数的生产力技巧. 这篇文章将展示五个这样的技巧,这些技巧对我每天的工作都有帮助.请注意,这些仅适 ...

  10. Elasticsearch不同集群间备份恢复(S3存储)

    S3存储 首先都知道需要在ES集群上安装S3插件以及重启集群 在MINIO集群创建相应的桶 Kibana上注册快照存储库,两个不同的集群需要对接到同一个S3存储库,对接后会自动识别桶里的快照 < ...