Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
import React, { useState } from "react"
import './Calendar.css'
import MakeDay2 from "./MakeDay2";
function CaculateWeek(props){
const startDay = new Date(props.nowYear, props.nowMonth - 1, 1);
const lastDay = new Date(props.nowYear, props.nowMonth, 0);
const firstDay = startDay.getDay();
const lastDate = lastDay.getDate();
const weekArr = [];
const selectArr = [];
weekArr.push(<td></td>);
// 시작 끝 값을 수정해서 일정 변경
for(let i = 0; i < 10; i++){
const forSelect = [];
const minute = i*30;
const time = (String(Math.floor(minute/60)).padStart(2,"0"))+":"+(String(minute%60).padStart(2,"0"));
for(let j = 0; j < 7; j++){
const d = (props.week - 1) * 7 + j - firstDay+1;
const newDate = new Date(props.nowYear, props.nowMonth-1, d);
if(i===0){
let cn = "cella";
if(d < 1)cn = "cellb"
else if(d > lastDate)cn = "cellb"
weekArr.push(<td className={cn}>{newDate.getDate()}</td>);
}
forSelect.push(<td className="ttt" onClick={()=>console.log(newDate.toDateString(),i)}></td>);
}
selectArr.push(
<tr key={i}>{time} {forSelect}</tr>
);
}
return(
<tbody>
<tr>{weekArr}</tr>
{selectArr}
</tbody>
);
}
function CalendarWeek2(){
const [currentDay, setCurrentDay] = useState(new Date());
// 일요일 0 시작
const nowDay = currentDay.getDay();
const nowDate = currentDay.getDate();
const [nowMonth, setNowMonth] = useState(currentDay.getMonth() + 1); // zero-base
const [nowYear, setNowYear] = useState(currentDay.getFullYear());
const [nowWeek, setNowWeek] = useState(1);
const firstDay = (new Date(nowYear, nowMonth - 1, 1)).getDay();
const lastDay = (new Date(nowYear, nowMonth, 0)).getDay();
let maxWeek = 5;
if(firstDay > lastDay)maxWeek=6;
const prevWeek = () => {
let newWeek = nowWeek - 1;
let newMonth = nowMonth;
let newYear = nowYear;
if(newWeek < 1){
newWeek = maxWeek;
newMonth = nowMonth - 1;
if(newMonth < 1){
newMonth = 12;
newYear = nowYear - 1;
}
}
const fd = (new Date(newYear, newMonth - 1, 1)).getDay();
const ld = (new Date(newYear, newMonth, 0)).getDay();
if(maxWeek === 6 && fd < ld)newWeek-=1;
else if(maxWeek === 5 && fd > ld)newWeek+=1;
setNowWeek(newWeek);
setNowMonth(newMonth);
setNowYear(newYear);
setCurrentDay(new Date(nowYear, nowMonth - 1, 1*(nowWeek-1) + nowDay));
}
const nextWeek = () => {
let newWeek = nowWeek + 1;
let newMonth = nowMonth;
let newYear = nowYear;
if(newWeek > maxWeek){
newWeek = 1;
newMonth = nowMonth + 1;
if(newMonth > 12){
newMonth = 1;
newYear = nowYear + 1;
}
}
setNowWeek(newWeek);
setNowMonth(newMonth);
setNowYear(newYear);
setCurrentDay(new Date(nowYear, nowMonth - 1, nowDate));
}
return(
<div className="calendar">
<div className="header">
<h1>{nowMonth}월 {nowWeek}주차</h1>
<button onClick={prevWeek}>prev</button>
<button onClick={nextWeek}>next</button>
</div>
<h1>{nowYear}</h1>
<table className="calendarTable">
<MakeDay2/>
<CaculateWeek week={nowWeek} currentDay={currentDay} nowYear={nowYear} nowMonth={nowMonth} />
</table>
</div>
);
}
export default CalendarWeek2;