/**
* 获取一段时间内(可跨年),以季度为单位,第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. SQL 训练题目

    title: SQL 训练题目 date: 2023-7-15 01:45:50 tags: - SQL 训练 一. 查询 "01" 课程比 "02" 课程成绩 ...

  2. go中context源码解读

    context 前言 什么是context 为什么需要context呢 context底层设计 context的实现 几种context emptyCtx cancelCtx timerCtx val ...

  3. SqlSugar多库/多租户

    1. 多库和多租户 如果是接口ISugarClient先看一下标题6,看完在看这儿 1.1 固定多数据库模式 数据库数量是固定的一般在声明的全部加上 //通过ConfigId进行数据库区分 var d ...

  4. 推荐系统[三]:粗排算法常用模型汇总(集合选择和精准预估),技术发展历史(向量內积,Wide&Deep等模型)以及前沿技术

    1.前言:召回排序流程策略算法简介 推荐可分为以下四个流程,分别是召回.粗排.精排以及重排: 召回是源头,在某种意义上决定着整个推荐的天花板: 粗排是初筛,一般不会上复杂模型: 精排是整个推荐环节的重 ...

  5. 遥感图像处理笔记之【Land use/Land cover classification with Deep Learning】

    遥感图像处理学习(1) 前言 遥感图像处理方向的学习者可以参考或者复刻 本文初编辑于2023年12月14日CSDN平台 2024年1月24日搬运至本人博客园平台 文章标题:Land use/Land ...

  6. ElasticSearch7.3学习(三)----采用restful风格 批量(bulk)增删改

    Bulk 操作是将文档的增删改查一些列操作,通过一次请求全都做完.目的是减少网络传输次数. 语法: POST /_bulk {"action": {"metadata&q ...

  7. 20.1 DLL模块的显式加载和符号链接--《Windows核心编程》

    一.显式加载DLL模块使用函数 LoadLibrary/LoadLibraryEx HINSTANCE LoadLibrary(PCTSTR pSzDLLPathName); HINSTANCE Lo ...

  8. CF1853

    你谷的加题速度实在太慢了 被 CF 的题目薄纱 A 可以选任意次 \(i\in [1,n]\),使 \(a[1\sim i]++,a[i+1\sim n]--\).求最少操作次数使得原数列变成非从小到 ...

  9. windows网络流量监控

    NPCap 官网 https://nmap.org/npcap/ 这是抓包必须先安装的工具,具体的原因可以看 https://github.com/buger/goreplay/wiki/Runnin ...

  10. 【Unity3D】场景切换、全屏_恢复切换、退出游戏、截屏

    1 前言 ​ 1)场景切换 ​ 场景切换可以使用 SceneManager 的 LoadScene 和 LoadSceneAsync 方法,如下: public static void LoadSce ...