Python+Flask做一个获取日期范围的页面供大家学习使用

12 篇文章 0 订阅

话不多说,有图有源码

1.效果图

2.源码

        2.1)前端页面test_daterange.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script type="text/javascript" src="/static/js/jQuery-2.2.0.min.js" ></script>
    <script language="javascript" type="text/javascript" src="/static/lib/My97DatePicker/WdatePicker.js"></script>
<style>
.bold-red {
  color:red;

}
.bold-input {
  font-weight: bold;
  font-size: 24px;
  text-align: center;
  color:blue;
  width:460px;
}
.bold-button {
  font-weight: bold;
  font-size: 18px;
  text-align: center;
  color:green;
}
.div-top-10 {
  position: relative;
  top: 10px;
  left: 100px
}
table {
  border-collapse: collapse;
  width: 750px;
  text-align: left;
  font-family: Arial, sans-serif;
  font-size: 16px;
}
td, th {
  border: 1px solid #ddd;
  padding: 8px;
}
th {
  background-color: #f2f2f2;
  color: #333;
}
tr:nth-child(even) {
  background-color: #f9f9f9;
}
</style>
</head>
<body>
<div class="div-top-10">
    <h1 class="bold-red">Ewangda 企业经营数据报表专家</h1>
    <h4>选择日期:<input class="Wdate bold-input" type="text" onClick="WdatePicker({el:this,dateFmt:'yyyy-MM-dd'})" name="getdate" id="getdate"  class="form-control"> <button id="btn_hello"  class="bold-button">获取日期范围</button></h4>
    <table>
        <tr><th>要查看的范围</th><th>开始日期</th><th>截止日期</th></tr>
        <tr><td>今天</td><td id="tdb"></td><td id="tde"></td></tr>
        <tr><td>本周</td><td id="twb"></td><td id="twe"></td></tr>
        <tr><td>本月</td><td id="tmb"></td><td id="tme"></td></tr>
        <tr><td>本季</td><td id="tqb"></td><td id="tqe"></td></tr>
        <tr><td>今年</td><td id="tyb"></td><td id="tye"></td></tr>
        <tr><td> </td><td></td><td></td></tr>
        <tr><td>明天</td><td id="ndb"></td><td id="nde"></td></tr>
        <tr><td>下周</td><td id="nwb"></td><td id="nwe"></td></tr>
        <tr><td>下月</td><td id="nmb"></td><td id="nme"></td></tr>
        <tr><td>下季</td><td id="nqb"></td><td id="nqe"></td></tr>
        <tr><td>明年</td><td id="nyb"></td><td id="nye"></td></tr>
        <tr><td> </td><td></td><td></td></tr>
        <tr><td>昨天</td><td id="ldb"></td><td id="lde"></td></tr>
        <tr><td>上周</td><td id="lwb"></td><td id="lwe"></td></tr>
        <tr><td>上月</td><td id="lmb"></td><td id="lme"></td></tr>
        <tr><td>上季</td><td id="lqb"></td><td id="lqe"></td></tr>
        <tr><td>去年</td><td id="lyb"></td><td id="lye"></td></tr>
    </table>
</div>
</body>
<script>
$("#btn_hello").click(function () {
//-----gtj 通过ajax 获取后台数据
    $.ajax({
        url: '/',
        type: "post",
        dataType: "json",
        data:{
            getdate: $('#getdate').val(),
        },
        success: function(rs){
            //-------从后台获得的信息
            data = rs.data;
            console.log(data);
            $("#tdb").text(data.tdb);
            $("#tde").text(data.tde);
            $("#twb").text(data.twb);
            $("#twe").text(data.twe);
            $("#tmb").text(data.tmb);
            $("#tme").text(data.tme);
            $("#tqb").text(data.tqb);
            $("#tqe").text(data.tqe);
            $("#tyb").text(data.tyb);
            $("#tye").text(data.tye);
            $("#ndb").text(data.ndb);
            $("#nde").text(data.nde);
            $("#nwb").text(data.nwb);
            $("#nwe").text(data.nwe);
            $("#nmb").text(data.nmb);
            $("#nme").text(data.nme);
            $("#nqb").text(data.nqb);
            $("#nqe").text(data.nqe);
            $("#nyb").text(data.nyb);
            $("#nye").text(data.nye);
            $("#ldb").text(data.ldb);
            $("#lde").text(data.lde);
            $("#lwb").text(data.lwb);
            $("#lwe").text(data.lwe);
            $("#lmb").text(data.lmb);
            $("#lme").text(data.lme);
            $("#lqb").text(data.lqb);
            $("#lqe").text(data.lqe);
            $("#lyb").text(data.lyb);
            $("#lye").text(data.lye);


        },
        error: function(rs){
            console.log(rs)
        }
    });
})
</script>
</html>

2.2)后端test_daterange.py

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# ---------开发于2024-05-----------
__author__ = '阿桂天山'
# =========================================================================================
from flask import Flask, jsonify, render_template,request
from utils import restful
import pandas as pd
from datetime import date,datetime,timedelta
from dateutil.relativedelta import relativedelta
app = Flask(__name__)


@app.route('/', methods=['GET','POST'])
def test_daterange():
    if request.method=='GET':
        return render_template('test_daterange.html')
    else:
        values = request.values
        getdate = values.get('getdate')
        print(type(getdate),getdate)
        data ={}

        data['tdb'] = date.today().strftime('%Y-%m-%d')
        data['tde'] = date.today().strftime('%Y-%m-%d')
        #--------'本周'------------------
        def get_current_week_dates():
            today = datetime.strptime(getdate, '%Y-%m-%d')
            first_day_of_week = today - relativedelta(days=today.weekday())
            last_day_of_week = first_day_of_week + relativedelta(days=6)
            return first_day_of_week.date().strftime('%Y-%m-%d'), last_day_of_week.date().strftime('%Y-%m-%d')

        data['twb'], data['twe'] = get_current_week_dates()
        #--------'本月'--------------------
        this_month = datetime.strptime(getdate, '%Y-%m-%d')
        next_month = datetime.strptime(getdate, '%Y-%m-%d') + relativedelta(months=1)
        data['tmb'] = (date(this_month.year, this_month.month, 1)).strftime('%Y-%m-%d')
        data['tme'] = (date(next_month.year, next_month.month, 1) - relativedelta(days=1)).strftime('%Y-%m-%d')
        #-----------'本季'--------------------------
        def get_quarter_range(date):
            # 获取当前季度的第一天
            first_day_of_quarter = date.replace(month=1 + ((date.month - 1) // 3) * 3, day=1)
            # 获取当前季度的最后一天
            last_day_of_quarter = first_day_of_quarter + pd.offsets.QuarterEnd(0)
            return first_day_of_quarter.date().strftime('%Y-%m-%d'), last_day_of_quarter.date().strftime(
                '%Y-%m-%d')

        today = datetime.strptime(getdate, '%Y-%m-%d')
        data['tqb'], data['tqe'] = get_quarter_range(today)
        #------------'今年'----------------------
        today = datetime.strptime(getdate, '%Y-%m-%d')
        data['tyb'] = (date(today.year, 1, 1)).strftime('%Y-%m-%d')
        data['tye'] = (date(today.year, 12, 31)).strftime('%Y-%m-%d')
        #------------'明天'-----------------
        today = datetime.strptime(getdate, '%Y-%m-%d')
        newday = today + timedelta(days=1)
        data['ndb'] = newday.strftime('%Y-%m-%d')
        data['nde'] = newday.strftime('%Y-%m-%d')

        #------------'下周':
        def get_next_week_dates(date):
            last_week_same_day = date + relativedelta(weeks=1)
            last_week_start = last_week_same_day - timedelta(days=last_week_same_day.weekday())
            last_week_end = last_week_start + timedelta(days=6)
            return last_week_start, last_week_end

        today = datetime.strptime(getdate, '%Y-%m-%d')
        next_week_start, next_week_end = get_next_week_dates(today)
        data['nwb'] = next_week_start.strftime('%Y-%m-%d')
        data['nwe'] = next_week_end.strftime('%Y-%m-%d')
        #------------'下月':
        today = datetime.strptime(getdate, '%Y-%m-%d')
        next_month = today + relativedelta(months=1)
        next_last_month = today + relativedelta(months=2)
        data['nmb'] = (date(next_month.year, next_month.month, 1)).strftime('%Y-%m-%d')
        data['nme'] = (date(next_last_month.year, next_last_month.month, 1) - relativedelta(days=1)).strftime(
            '%Y-%m-%d')
        #------------'下季':
        def get_next_quarter_range(date):
            # 得到下季度的第一天
            first_day_of_previous_quarter = datetime(date.year, (date.month - 1)//3 * 3 + 1,
                                                     1) + relativedelta(months=3)
            # 得到下季度的最后一天
            last_day_of_previous_quarter = first_day_of_previous_quarter + relativedelta(months=3, days=-1)
            return first_day_of_previous_quarter.date().strftime(
                '%Y-%m-%d'), last_day_of_previous_quarter.date().strftime('%Y-%m-%d')

        today = datetime.strptime(getdate, '%Y-%m-%d')
        data['nqb'], data['nqe'] = get_next_quarter_range(today)
        #------------'明年':
        today = datetime.strptime(getdate, '%Y-%m-%d') + relativedelta(years=1)
        data['nyb'] = (date(today.year, 1, 1)).strftime('%Y-%m-%d')
        data['nye'] = (date(today.year, 12, 31)).strftime('%Y-%m-%d')
        #
        #--------------'昨天':
        today = datetime.strptime(getdate, '%Y-%m-%d')
        newday = today - timedelta(days=1)
        data['ldb'] = newday.strftime('%Y-%m-%d')
        data['lde'] = newday.strftime('%Y-%m-%d')
        #-----------------'上周':
        def get_last_week_dates(date):
            last_week_same_day = date - relativedelta(weeks=1)
            last_week_start = last_week_same_day - timedelta(days=last_week_same_day.weekday())
            last_week_end = last_week_start + timedelta(days=6)
            return last_week_start, last_week_end

        today = datetime.strptime(getdate, '%Y-%m-%d')
        last_week_start, last_week_end = get_last_week_dates(today)
        data['lwb'] = last_week_start.strftime('%Y-%m-%d')
        data['lwe'] = last_week_end.strftime('%Y-%m-%d')
        #------------------------'上月':
        today = datetime.strptime(getdate, '%Y-%m-%d')
        this_month = today
        last_month = today - relativedelta(months=1)
        data['lmb'] = (date(last_month.year, last_month.month, 1)).strftime('%Y-%m-%d')
        data['lme'] = (date(this_month.year, this_month.month, 1) - relativedelta(days=1)).strftime('%Y-%m-%d')
        #------------------------'上季':
        def get_previous_quarter_dates(date):
            # 计算指定日期所在季度的第一天
            first_day_of_quarter = datetime(date.year, (date.month - 1) // 3 * 3 + 1, 1)
            # 计算上一季度的第一天
            first_day_of_previous_quarter = first_day_of_quarter - relativedelta(months=3)
            # 上一季度的起始日期
            start_date = first_day_of_previous_quarter.strftime('%Y-%m-%d')
            # 上一季度的结束日期
            end_date = (first_day_of_quarter - timedelta(days=1)).strftime('%Y-%m-%d')
            return start_date, end_date

        today = datetime.strptime(getdate, '%Y-%m-%d')
        data['lqb'], data['lqe'] = get_previous_quarter_dates(today)
        #---------------------------'去年':
        today = date.today() - relativedelta(years=1)
        data['lyb'] = (date(today.year, 1, 1)).strftime('%Y-%m-%d')
        data['lye'] = (date(today.year, 12, 31)).strftime('%Y-%m-%d')

        return restful.success(data =data)

if __name__ == '__main__':

    app.run(port=9111,debug=True)

如果对你有所帮助,那就请你三联:关注+点赞+转发吧!

  • 14
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿桂天山

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值