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

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

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

相关帖子

欢迎来到这里!

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

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

推荐标签 标签

  • Sphinx

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

    1 引用 • 229 关注
  • Git

    Git 是 Linux Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。

    211 引用 • 358 回帖
  • Solidity

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

    3 引用 • 18 回帖 • 438 关注
  • 黑曜石

    黑曜石是一款强大的知识库工具,支持本地 Markdown 文件编辑,支持双向链接和关系图。

    A second brain, for you, forever.

    24 引用 • 242 回帖
  • 30Seconds

    📙 前端知识精选集,包含 HTML、CSS、JavaScript、React、Node、安全等方面,每天仅需 30 秒。

    • 精选常见面试题,帮助您准备下一次面试
    • 精选常见交互,帮助您拥有简洁酷炫的站点
    • 精选有用的 React 片段,帮助你获取最佳实践
    • 精选常见代码集,帮助您提高打码效率
    • 整理前端界的最新资讯,邀您一同探索新世界
    488 引用 • 384 回帖 • 5 关注
  • 思源笔记

    思源笔记是一款隐私优先的个人知识管理系统,支持完全离线使用,同时也支持端到端加密同步。

    融合块、大纲和双向链接,重构你的思维。

    26030 引用 • 108021 回帖
  • LaTeX

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

    12 引用 • 59 回帖 • 5 关注
  • Excel
    31 引用 • 28 回帖 • 2 关注
  • CSDN

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

    14 引用 • 155 回帖
  • 反馈

    Communication channel for makers and users.

    120 引用 • 906 回帖 • 280 关注
  • JRebel

    JRebel 是一款 Java 虚拟机插件,它使得 Java 程序员能在不进行重部署的情况下,即时看到代码的改变对一个应用程序带来的影响。

    26 引用 • 78 回帖 • 675 关注
  • SendCloud

    SendCloud 由搜狐武汉研发中心孵化的项目,是致力于为开发者提供高质量的触发邮件服务的云端邮件发送平台,为开发者提供便利的 API 接口来调用服务,让邮件准确迅速到达用户收件箱并获得强大的追踪数据。

    2 引用 • 8 回帖 • 504 关注
  • LeetCode

    LeetCode(力扣)是一个全球极客挚爱的高质量技术成长平台,想要学习和提升专业能力从这里开始,充足技术干货等你来啃,轻松拿下 Dream Offer!

    209 引用 • 72 回帖 • 1 关注
  • Vim

    Vim 是类 UNIX 系统文本编辑器 Vi 的加强版本,加入了更多特性来帮助编辑源代码。Vim 的部分增强功能包括文件比较(vimdiff)、语法高亮、全面的帮助系统、本地脚本(Vimscript)和便于选择的可视化模式。

    29 引用 • 66 回帖 • 4 关注
  • 音乐

    你听到信仰的声音了么?

    62 引用 • 512 回帖
  • SOHO

    为成为自由职业者在家办公而努力吧!

    7 引用 • 55 回帖
  • sts
    2 引用 • 2 回帖 • 243 关注
  • HTML

    HTML5 是 HTML 下一个的主要修订版本,现在仍处于发展阶段。广义论及 HTML5 时,实际指的是包括 HTML、CSS 和 JavaScript 在内的一套技术组合。

    108 引用 • 295 回帖
  • RESTful

    一种软件架构设计风格而不是标准,提供了一组设计原则和约束条件,主要用于客户端和服务器交互类的软件。基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。

    30 引用 • 114 回帖 • 1 关注
  • FlowUs

    FlowUs.息流 个人及团队的新一代生产力工具。

    让复杂的信息管理更轻松、自由、充满创意。

    1 引用 • 6 关注
  • Ubuntu

    Ubuntu(友帮拓、优般图、乌班图)是一个以桌面应用为主的 Linux 操作系统,其名称来自非洲南部祖鲁语或豪萨语的“ubuntu”一词,意思是“人性”、“我的存在是因为大家的存在”,是非洲传统的一种价值观,类似华人社会的“仁爱”思想。Ubuntu 的目标在于为一般用户提供一个最新的、同时又相当稳定的主要由自由软件构建而成的操作系统。

    127 引用 • 169 回帖 • 1 关注
  • Laravel

    Laravel 是一套简洁、优雅的 PHP Web 开发框架。它采用 MVC 设计,是一款崇尚开发效率的全栈框架。

    19 引用 • 23 回帖 • 737 关注
  • Lute

    Lute 是一款结构化的 Markdown 引擎,支持 Go 和 JavaScript。

    29 引用 • 202 回帖 • 28 关注
  • CodeMirror
    2 引用 • 17 回帖 • 166 关注
  • MyBatis

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

    173 引用 • 414 回帖 • 363 关注
  • etcd

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

    6 引用 • 26 回帖 • 541 关注
  • SQLite

    SQLite 是一个进程内的库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。SQLite 是全世界使用最为广泛的数据库引擎。

    4 引用 • 7 回帖 • 5 关注