工作上,遇到了一个获取油价调整时间的需求,晚上下班了,回想了下这个问题,然后顺便百度了下油价调整周期表,结果并没找到,但是发现有个规则,也就是 10 个工作日调整一次,那么每年的第一次调整是哪天呢?带着这个疑问简单研究了下,发现是去年最后一次调整日期 +10 个工作日,得出新年的第一次调整周期,以此类推 ~
好了,明白了原理,代码就好写了 ~
油价调整规则
-
国内油价调整规则:成品油调整周期为 10 个工作日,也就是说是十个工作日之后油价调整窗口开启一次,而工作日不包含周六日和法定假日。
根据这个规则,我们就可以使用程序计算出其调价日期来了
不多说,直接进入正题。
简单实现一下,仅做记录用,估计有更好的方式来实现吧!
<?php
index();
function index()
{
$year = $_GET['year'] ?? '2021';
$date = $_GET['date'] ?? '01-15';
$start_date = $year . '-' . $date;
$end_date = $year . '-12-31';
$year_date = dateRange($start_date, $end_date);
echo '<pre>';
//var_dump($year_date);
$holiday = getHoliday($year);
$n = 0;
$zm = [6, 0];//周末
foreach ($year_date as $key => $val) {
$date = substr(strstr($val, '-'), 1);
$week = date("w", strtotime($val));//星期
// 周一~周5且不是假期 或者 周六到周日 且不是法定调休 即可得到工作日
if (
(!isset($holiday[$date]) && !in_array($week, $zm)) ||
(isset($holiday[$date]) && $holiday[$date]['holiday'] == false && in_array($week, $zm))
) {
if ($n % 10 == 0)
$out[] = $val;
$n++;
}
}
var_dump(json_encode($out));
}
/**
* 日期范围得到一个天为单位的数组
* @param string $start_date Y-m-d:2020-06-01
* @param string $end_date Y-m-d:2020-06-07
* @return array
*/
function dateRange($start_date, $end_date)
{
if ($start_date > $end_date) {
$start = strtotime($end_date);
$end = strtotime($start_date);
$is_reverse = true;
} else {
$start = strtotime($start_date);
$end = strtotime($end_date);
$is_reverse = false;
}
$i = 0;
$range = [];
while ($start <= $end) {
$range[$i] = date('Y-m-d', $start);
$start = strtotime('+1 day', $start);
$i++;
}
return $is_reverse ? array_reverse($range) : $range;
}
function getHoliday($year = null)
{
$year = $year ?? date('y');
// $cacheKey = "holiday_{$year}";
// $holiday = \Cache::get($cacheKey);
// if(is_null($holiday)){
$holiday = json_decode(file_get_contents('http://timor.tech/api/holiday/year/' . $year), true);
// if($holiday['code'] == '0')
// \Cache::put($cacheKey, $holiday, Carbon::now()->addYear(1));
// }
return $holiday['holiday'];
}
- 程序运行结果
[
"2021-01-15",
"2021-01-29",
"2021-02-18",
"2021-03-03",
"2021-03-17",
"2021-03-31",
"2021-04-15",
"2021-04-28",
"2021-05-14",
"2021-05-28",
"2021-06-11",
"2021-06-28",
"2021-07-12",
"2021-07-26",
"2021-08-09",
"2021-08-23",
"2021-09-06",
"2021-09-18",
"2021-10-09",
"2021-10-22",
"2021-11-05",
"2021-11-19",
"2021-12-03",
"2021-12-17",
"2021-12-31"
]
2021 年我国成品油共迎 25 轮调价窗口期,首次调整时间为 1 月 15 日 24 时。
具体油价调整时间表看下图(或文字)。成品油油价调整时间为 10 个工作日一次,日期分别为:
1月15日;1月29日;
2月18日;
3月3日;3月17日;3月31日;
4月15日;4月28日;
5月14日;5月28日;
6月11日;6月28日;
7月12日;7月26日;
8月9日;8月23日;
9月6日;9月18日;
10月9日;10月22日;
11月5日;11月19日;
12月3日;12月17日;12月31日。
🐶 你走,我不送你。你来,风雨无阻,我去接你。