获取每个月的第一天和最后一天,从当前日期开始

问题描述 投票:0回答:3

我想多次运行 python 文件并在每次运行时更改输入值。在本例中,输入值是一个网站地址和两个具有给定开始日期和给定结束日期的日期范围。

示例:

我想循环遍历并运行此文件,其中包含最多 12 个月前的不同日期。

文件

迭代 1,今天的日期和当月的第一天:

run -i 'file.py' 'https://www.example.com/' '2019-09-01' '2019-09-12'

迭代2,上个月的第一个日期和上个月的最后一个日期:

run -i 'file.py' 'https://www.example.com/' '2019-08-01' '2019-08-31'

迭代 3:

run -i 'file.py' 'https://www.example.com/' '2019-07-01' '2019-07-31'

...

继续迭代 12 个月前

我已经成功构建了一个 for 循环来生成日期,但我在合并 python 文件时遇到了麻烦。

for i in {1..12}; do 
    echo $(date -I -d "2019-09-01 -$i months")
done

输出:

2019-08-01
2019-07-01
2019-06-01
2019-05-01
2019-04-01
2019-03-01
2019-02-01
2019-01-01
2018-12-01
2018-11-01
2018-10-01
2018-09-01
bash date terminal
3个回答
0
投票

您可以使用以下代码:

d1=$(date '+%Y-%m-01')
d2=$(date '+%Y-%m-%d')
for i in {1..12}; do 
    run -i 'file.py' 'https://www.example.com/' $d1 $d2
    d2=$(date -d "$d1 -1 day"  '+%Y-%m-%d')
    d1=$(date -d "$d2" '+%Y-%m-01')
done

说明:

  • 我们从第一天作为
    d1
    开始,当月的当前日期作为
    d2
  • 对于每次迭代,我们通过前一个日期
    d2
    (上个月的第一天)减去一天来推导出
    d1

将执行以下命令行:

run -i file.py 'https://www.example.com/' 2019-09-01 2019-09-12
run -i file.py 'https://www.example.com/' 2019-08-01 2019-08-31
run -i file.py 'https://www.example.com/' 2019-07-01 2019-07-31
run -i file.py 'https://www.example.com/' 2019-06-01 2019-06-30
run -i file.py 'https://www.example.com/' 2019-05-01 2019-05-31
run -i file.py 'https://www.example.com/' 2019-04-01 2019-04-30
run -i file.py 'https://www.example.com/' 2019-03-01 2019-03-31
run -i file.py 'https://www.example.com/' 2019-02-01 2019-02-28
run -i file.py 'https://www.example.com/' 2019-01-01 2019-01-31
run -i file.py 'https://www.example.com/' 2018-12-01 2018-12-31
run -i file.py 'https://www.example.com/' 2018-11-01 2018-11-30
run -i file.py 'https://www.example.com/' 2018-10-01 2018-10-31

0
投票

你可以试试这个

run -i 'file.py' 'https://www.example.com/' '2019-09-01' '2019-09-12'
for i in {1..12}; do 
    run -i 'file.py' 'https://www.example.com/' '`echo $(date -I -d "2019-09-01 -$i months")`' '`echo $(date -I -d "2019-09-31 -$i months")`'
done

您可以使用反引号 (`) 来计算命令并替换命令的输出,就像您的情况一样,替换为日期。

更好的方法是从另一个脚本调用 python 脚本(假设您是编写第一个脚本的人)。


0
投票

这是我的解决方案:

daysInThisMonth(){
   d1=$(date '+%Y-%m-01')
   d2=$(date '+%Y-%m-28')
   d2=$(date -d "$d2 +5 day"  '+%Y-%m')
   d2=$d2-01
   sec=$(( `date --date "$d2" +%s` - `date --date "$d1" +%s` ))
   daysInMonth=$((sec / 24 / 60 / 60 ))
}
© www.soinside.com 2019 - 2024. All rights reserved.