获取一段时间内,以月/季度为单位,第N天在各个月/季度是几几年几月几号
/**
* 获取一段时间内(可跨年),以季度为单位,第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天在各个月/季度是几几年几月几号的更多相关文章
- oracle获取一段时间内所有的小时、天、月
获取一段时间内所有的小时 ) sdate FROM dual CONNECT ; 获取一段时间内所有的天 sdate FROM dual CONNECT ; from user_objects whe ...
- java根据日期获取周几和获取某段时间内周几的日期
整理两个日期的方法. 根据日期获取当天是周几 /** * 根据日期获取当天是周几 * @param datetime 日期 * @return 周几 */ public static String d ...
- Java 获取一段时间内的每一天
有时候我们会遇到一些业务场景,需要去获取一段时间内的每一天日期 public static List<Date> findDates(Date dBegin, Date dEnd) { L ...
- PHP获取一段时间内的每个周几, 每月几号, 遇到特殊日子就往后延
2016年11月1日 16:18:19 星期二 主要用到的函数是 strtotime() strtotime('+1 Tuesday', $timestamp) 获取下周二, 从时间戳$timesta ...
- java获取某段时间内的月份列表
/**获取两个时间节点之间的月份列表**/ private static List<String> getMonthBetween(String minDate, String maxDa ...
- JS 获取一段时间内的工作时长小时数
本来想是想找轮子的,但是并没有找到能用的,多数都是问题很大,所以就自己写了一个 需求说明 支持自选时间段,即开始时间与结束时间根据用户的上班及下班时间判定返回小时数 技术栈 moment.js 思考过 ...
- 用sql获取一段时间内的数据
我把我CSDN写的 搬来博客园了.. SELECT * FROM 表名 WHERE timestampdiff(MINUTE, SYSDATE(), send_time) <=60 AND ...
- mysql 获取一段时间的数据
用 sql 获取一段时间内的数据: SELECT * FROM EDI.edi_history WHERE timestampdiff(day, SYSDATE(), create_time_loc) ...
- 利用zabbix API 统计一段时间内监控项的均值和峰值
#coding:utf-8 #给定主机IP获取一段时间内cpu的均值和峰值并写入文件(txt,可以跑完后直接把后缀名改为csv以表格形式打开):需要指定IP文件 import requests imp ...
- java 求取某一段时间内的每一天、每一月、每一年
1.求取某一段时间内的每一天 Date date0 = new SimpleDateFormat("yyyy-MM-dd").parse("2014-01-01" ...
随机推荐
- Xmind永久会员版本
Xmind软件不要多介绍了思维导图最好用的软件 PJ后可以直接使用高级版本功能如图 使用方式 下载我们提供的版本和.dll即可如图 点击Xmind安装默认C盘不可以自定义位置 安装完成后进入patch ...
- layui之静态表格的分页及搜索功能以及前端使用XLSX导出Excel功能
LayUI官方文档:https://layui.dev/docs/2/#introduce XLSX NPM地址:https://www.npmjs.com/package/xlsx XLSX 使用参 ...
- C++ LibCurl实现Web隐藏目录扫描
LibCurl是一个开源的免费的多协议数据传输开源库,该框架具备跨平台性,开源免费,并提供了包括HTTP.FTP.SMTP.POP3等协议的功能,使用libcurl可以方便地进行网络数据传输操作,如发 ...
- 关于elementui日期组件 date.getHours() is not a function 等问题
问题 日期控件中,假设当前显示日期为2020-01-01,现在需要修改为2020-01-03:点开日期组件框点击选择其他日期时, 控制台有可能会报错,显示 date.getHours() is n ...
- 关于 vant 移动端的 rem 适配方案
一.使用 lib-flexible 动态设置 rem 基准值 (html 标签的字体大小) (1) 安装依赖: npm i amfe-flexible -D (2) 在main.js 中引入 impo ...
- Oracle配置DCD避免会话被防火墙强制断开
今天有客户反馈应用测试连接Oracle数据库的会话半小时左右未做操作就会被中断,报错ORA-3113,询问数据库是否有这样的超时设置,能否取消掉这个限制? 登上环境查看监听日志发现连接的IP和数据库I ...
- PostgreSQL-可以通过localhost连接,无法通过IP地址连接。
(1)如果PostgreSQL配置文件中没有允许访问该服务器的IP地址,则需要先添加允许访问的IP地址,并在防火墙中开放相应的端口.(2)在PostgreSQL配置文件postgresql.conf中 ...
- 【Flink入门修炼】1-3 Flink WordCount 入门实现
本篇文章将带大家运行 Flink 最简单的程序 WordCount.先实践后理论,对其基本输入输出.编程代码有初步了解,后续篇章再对 Flink 的各种概念和架构进行介绍. 下面将从创建项目开始,介绍 ...
- JS leetcode 两数之和 II - 输入有序数组 题解分析
壹 ❀ 引 我在JS leetcode 两数之和 解答思路分析一文中首次解决两数之和等于目标值的问题,那么今天遇到的是两数之和的升级版,题目为leetcode167. 两数之和 II - 输入有序数组 ...
- NC24438 [USACO 2016 Ope P]262144
题目链接 题目 题目描述 Bessie likes downloading games to play on her cell phone, even though she does find the ...