暴力计算全国油价调整日期,期待有更好的计算方式~

本贴最后更新于 1114 天前,其中的信息可能已经时移俗易

工作上,遇到了一个获取油价调整时间的需求,晚上下班了,回想了下这个问题,然后顺便百度了下油价调整周期表,结果并没找到,但是发现有个规则,也就是 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日。

image.png

1 操作
ieras 在 2021-04-06 23:52:13 更新了该帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...

推荐标签 标签

  • 996
    13 引用 • 200 回帖
  • MyBatis

    MyBatis 本是 Apache 软件基金会 的一个开源项目 iBatis,2010 年这个项目由 Apache 软件基金会迁移到了 google code,并且改名为 MyBatis ,2013 年 11 月再次迁移到了 GitHub。

    170 引用 • 414 回帖 • 429 关注
  • 区块链

    区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。所谓共识机制是区块链系统中实现不同节点之间建立信任、获取权益的数学算法 。

    91 引用 • 751 回帖
  • JWT

    JWT(JSON Web Token)是一种用于双方之间传递信息的简洁的、安全的表述性声明规范。JWT 作为一个开放的标准(RFC 7519),定义了一种简洁的,自包含的方法用于通信双方之间以 JSON 的形式安全的传递信息。

    20 引用 • 15 回帖 • 18 关注
  • etcd

    etcd 是一个分布式、高可用的 key-value 数据存储,专门用于在分布式系统中保存关键数据。

    5 引用 • 26 回帖 • 492 关注
  • Jenkins

    Jenkins 是一套开源的持续集成工具。它提供了非常丰富的插件,让构建、部署、自动化集成项目变得简单易用。

    51 引用 • 37 回帖
  • Quicker

    Quicker 您的指尖工具箱!操作更少,收获更多!

    20 引用 • 73 回帖 • 2 关注
  • 小薇

    小薇是一个用 Java 写的 QQ 聊天机器人 Web 服务,可以用于社群互动。

    由于 Smart QQ 从 2019 年 1 月 1 日起停止服务,所以该项目也已经停止维护了!

    34 引用 • 467 回帖 • 693 关注
  • Angular

    AngularAngularJS 的新版本。

    26 引用 • 66 回帖 • 511 关注
  • iOS

    iOS 是由苹果公司开发的移动操作系统,最早于 2007 年 1 月 9 日的 Macworld 大会上公布这个系统,最初是设计给 iPhone 使用的,后来陆续套用到 iPod touch、iPad 以及 Apple TV 等产品上。iOS 与苹果的 Mac OS X 操作系统一样,属于类 Unix 的商业操作系统。

    84 引用 • 139 回帖
  • Sillot

    Sillot (汐洛)孵化自思源笔记,致力于服务智慧新彖乄,具有彖乄驱动、极致优雅、开发者友好的特点
    Github 地址:https://github.com/Hi-Windom/Sillot

    15 引用 • 6 回帖 • 28 关注
  • Wide

    Wide 是一款基于 Web 的 Go 语言 IDE。通过浏览器就可以进行 Go 开发,并有代码自动完成、查看表达式、编译反馈、Lint、实时结果输出等功能。

    欢迎访问我们运维的实例: https://wide.b3log.org

    30 引用 • 218 回帖 • 605 关注
  • 书籍

    宋真宗赵恒曾经说过:“书中自有黄金屋,书中自有颜如玉。”

    76 引用 • 390 回帖
  • CSDN

    CSDN (Chinese Software Developer Network) 创立于 1999 年,是中国的 IT 社区和服务平台,为中国的软件开发者和 IT 从业者提供知识传播、职业发展、软件开发等全生命周期服务,满足他们在职业发展中学习及共享知识和信息、建立职业发展社交圈、通过软件开发实现技术商业化等刚性需求。

    14 引用 • 155 回帖
  • Kotlin

    Kotlin 是一种在 Java 虚拟机上运行的静态类型编程语言,由 JetBrains 设计开发并开源。Kotlin 可以编译成 Java 字节码,也可以编译成 JavaScript,方便在没有 JVM 的设备上运行。在 Google I/O 2017 中,Google 宣布 Kotlin 成为 Android 官方开发语言。

    19 引用 • 33 回帖 • 26 关注
  • Sphinx

    Sphinx 是一个基于 SQL 的全文检索引擎,可以结合 MySQL、PostgreSQL 做全文搜索,它可以提供比数据库本身更专业的搜索功能,使得应用程序更容易实现专业化的全文检索。

    1 引用 • 181 关注
  • 链书

    链书(Chainbook)是 B3log 开源社区提供的区块链纸质书交易平台,通过 B3T 实现共享激励与价值链。可将你的闲置书籍上架到链书,我们共同构建这个全新的交易平台,让闲置书籍继续发挥它的价值。

    链书社

    链书目前已经下线,也许以后还有计划重制上线。

    14 引用 • 257 回帖
  • 负能量

    上帝为你关上了一扇门,然后就去睡觉了....努力不一定能成功,但不努力一定很轻松 (° ー °〃)

    85 引用 • 1201 回帖 • 449 关注
  • Eclipse

    Eclipse 是一个开放源代码的、基于 Java 的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。

    75 引用 • 258 回帖 • 627 关注
  • 笔记

    好记性不如烂笔头。

    303 引用 • 777 回帖
  • 阿里云

    阿里云是阿里巴巴集团旗下公司,是全球领先的云计算及人工智能科技公司。提供云服务器、云数据库、云安全等云计算服务,以及大数据、人工智能服务、精准定制基于场景的行业解决方案。

    89 引用 • 345 回帖
  • Solidity

    Solidity 是一种智能合约高级语言,运行在 [以太坊] 虚拟机(EVM)之上。它的语法接近于 JavaScript,是一种面向对象的语言。

    3 引用 • 18 回帖 • 350 关注
  • VirtualBox

    VirtualBox 是一款开源虚拟机软件,最早由德国 Innotek 公司开发,由 Sun Microsystems 公司出品的软件,使用 Qt 编写,在 Sun 被 Oracle 收购后正式更名成 Oracle VM VirtualBox。

    10 引用 • 2 回帖 • 6 关注
  • LaTeX

    LaTeX(音译“拉泰赫”)是一种基于 ΤΕΧ 的排版系统,由美国计算机学家莱斯利·兰伯特(Leslie Lamport)在 20 世纪 80 年代初期开发,利用这种格式,即使使用者没有排版和程序设计的知识也可以充分发挥由 TeX 所提供的强大功能,能在几天,甚至几小时内生成很多具有书籍质量的印刷品。对于生成复杂表格和数学公式,这一点表现得尤为突出。因此它非常适用于生成高印刷质量的科技和数学类文档。

    9 引用 • 32 回帖 • 166 关注
  • Postman

    Postman 是一款简单好用的 HTTP API 调试工具。

    4 引用 • 3 回帖
  • 创造

    你创造的作品可能会帮助到很多人,如果是开源项目的话就更赞了!

    173 引用 • 990 回帖 • 1 关注
  • IDEA

    IDEA 全称 IntelliJ IDEA,是一款 Java 语言开发的集成环境,在业界被公认为最好的 Java 开发工具之一。IDEA 是 JetBrains 公司的产品,这家公司总部位于捷克共和国的首都布拉格,开发人员以严谨著称的东欧程序员为主。

    180 引用 • 400 回帖