teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

バグ修正

2021/02/04 15:58

投稿

退会済みユーザー
answer CHANGED
@@ -8,29 +8,69 @@
8
8
 
9
9
  何週間前は単純に差分日数の7で割った商なので質問者さんが最初に書いていた計算で大丈夫かと思います。
10
10
 
11
+ # コード
12
+
11
13
  ```python
14
+ # coding: utf-8
15
+ # Your code here!
16
+
12
17
  from datetime import datetime, timedelta
13
18
 
14
- old_datetime = datetime(2020, 7, 7)
19
+ old_datetime = datetime(2020, 2, 5)
15
- today_datetime = datetime.today()
20
+ today_datetime = datetime.today().replace(hour=0,minute=0,second=0,microsecond=0)
16
21
 
17
- # 日付は一旦おいて年月を月換算にする
18
- years_diff = today_datetime.year - old_datetime.year
19
- month_diff = (today_datetime.month - old_datetime.month) + years_diff * 12
20
-
21
- # 日付の扱い。定期券を同じ考え方で負数になる場合は、1カ月経過していないという事
22
- if today_datetime.day - old_datetime.day < 0:
23
- month_diff -= 1;
24
-
25
22
  # 日数と週の扱い
26
23
  date_diff = (today_datetime - old_datetime).days
27
24
  week_diff = date_diff // 7
28
25
 
26
+ # 月の扱い
27
+ month_diff = (today_datetime.month - old_datetime.month) + (today_datetime.year - old_datetime.year) * 12
29
- print(f'{old_datetime} {years_diff} 年前')
28
+ if today_datetime.day - old_datetime.day < 0:
29
+ month_diff -= 1
30
+
31
+ # 年の扱い
30
- print(f'{old_datetime} {month_diff} カ月前')
32
+ years_diff = month_diff // 12
31
- print(f'{old_datetime} は {week_diff} 週間前')
33
+
32
- print(f'{old_datetime} {date_diff} 日前')
34
+ print(f'{today_datetime} {old_datetime} の比較')
35
+ print(f'{years_diff} 年前、{month_diff} カ月前、{week_diff} 週間前、{date_diff} 日前')
33
36
  ```
34
37
 
35
- 動作サンプル
38
+ # 動作サンプル
36
- [https://paiza.io/projects/LW3wmLYdNQoPKsB3sgc9FQ?language=python3](https://paiza.io/projects/LW3wmLYdNQoPKsB3sgc9FQ?language=python3)
39
+ [https://paiza.io/projects/LW3wmLYdNQoPKsB3sgc9FQ?language=python3](https://paiza.io/projects/LW3wmLYdNQoPKsB3sgc9FQ?language=python3)
40
+
41
+
42
+ # 追記した悪乗り版コード
43
+
44
+ ```
45
+ from datetime import datetime, timedelta
46
+
47
+ def test(old_datetime):
48
+ today_datetime = datetime.today().replace(hour=0,minute=0,second=0,microsecond=0)
49
+
50
+ # 日数と週の扱い
51
+ date_diff = (today_datetime - old_datetime).days
52
+ week_diff = date_diff // 7
53
+
54
+ # 月の扱い
55
+ month_diff = (today_datetime.month - old_datetime.month) + (today_datetime.year - old_datetime.year) * 12
56
+ if today_datetime.day - old_datetime.day < 0:
57
+ month_diff -= 1
58
+
59
+ # 年の扱い
60
+ years_diff = month_diff // 12
61
+
62
+ print(f'{old_datetime} は、{years_diff} 年前、{month_diff} カ月前、{week_diff} 週間前、{date_diff} 日前')
63
+
64
+
65
+ print(f'今日は {datetime.today()} です。')
66
+
67
+ test(datetime(2021, 2, 4))
68
+ test(datetime(2021, 2, 3))
69
+ test(datetime(2021, 2, 1))
70
+ test(datetime(2021, 1, 31))
71
+ test(datetime(2020, 12, 4))
72
+ test(datetime(2020, 2, 6))
73
+ test(datetime(2020, 2, 5))
74
+ test(datetime(2020, 2, 4))
75
+ ```
76
+ [https://paiza.io/projects/_YmaBQlwVecdO9JDagJKvA](https://paiza.io/projects/_YmaBQlwVecdO9JDagJKvA)

1

週と日数も追加

2021/02/04 15:58

投稿

退会済みユーザー
answer CHANGED
@@ -11,7 +11,7 @@
11
11
  ```python
12
12
  from datetime import datetime, timedelta
13
13
 
14
- old_datetime = datetime(2021, 1, 5)
14
+ old_datetime = datetime(2020, 7, 7)
15
15
  today_datetime = datetime.today()
16
16
 
17
17
  # 日付は一旦おいて年月を月換算にする
@@ -22,8 +22,14 @@
22
22
  if today_datetime.day - old_datetime.day < 0:
23
23
  month_diff -= 1;
24
24
 
25
+ # 日数と週の扱い
25
- print(f'{old_datetime} とは {month_diff}カ月差')
26
+ date_diff = (today_datetime - old_datetime).days
27
+ week_diff = date_diff // 7
26
28
 
29
+ print(f'{old_datetime} は {years_diff} 年前')
30
+ print(f'{old_datetime} は {month_diff} カ月前')
31
+ print(f'{old_datetime} は {week_diff} 週間前')
32
+ print(f'{old_datetime} は {date_diff} 日前')
27
33
  ```
28
34
 
29
35
  動作サンプル