1+ const isLeapYear = ( year ) => {
2+ return (
3+ ( year % 4 === 0 && year % 100 !== 0 && year % 400 !== 0 ) ||
4+ ( year % 100 === 0 && year % 400 === 0 )
5+ ) ;
6+ } ;
7+ const getFebDays = ( year ) => {
8+ return isLeapYear ( year ) ? 29 : 28 ;
9+ } ;
10+ let calendar = document . querySelector ( '.calendar' ) ;
11+ const month_names = [
12+ 'January' ,
13+ 'February' ,
14+ 'March' ,
15+ 'April' ,
16+ 'May' ,
17+ 'June' ,
18+ 'July' ,
19+ 'August' ,
20+ 'September' ,
21+ 'October' ,
22+ 'November' ,
23+ 'December' ,
24+ ] ;
25+ let month_picker = document . querySelector ( '#month-picker' ) ;
26+ const dayTextFormate = document . querySelector ( '.day-text-formate' ) ;
27+ const timeFormate = document . querySelector ( '.time-formate' ) ;
28+ const dateFormate = document . querySelector ( '.date-formate' ) ;
29+
30+ month_picker . onclick = ( ) => {
31+ month_list . classList . remove ( 'hideonce' ) ;
32+ month_list . classList . remove ( 'hide' ) ;
33+ month_list . classList . add ( 'show' ) ;
34+ dayTextFormate . classList . remove ( 'showtime' ) ;
35+ dayTextFormate . classList . add ( 'hidetime' ) ;
36+ timeFormate . classList . remove ( 'showtime' ) ;
37+ timeFormate . classList . add ( 'hideTime' ) ;
38+ dateFormate . classList . remove ( 'showtime' ) ;
39+ dateFormate . classList . add ( 'hideTime' ) ;
40+ } ;
41+
42+ const generateCalendar = ( month , year ) => {
43+ let calendar_days = document . querySelector ( '.calendar-days' ) ;
44+ calendar_days . innerHTML = '' ;
45+ let calendar_header_year = document . querySelector ( '#year' ) ;
46+ let days_of_month = [
47+ 31 ,
48+ getFebDays ( year ) ,
49+ 31 ,
50+ 30 ,
51+ 31 ,
52+ 30 ,
53+ 31 ,
54+ 31 ,
55+ 30 ,
56+ 31 ,
57+ 30 ,
58+ 31 ,
59+ ] ;
60+
61+ let currentDate = new Date ( ) ;
62+
63+ month_picker . innerHTML = month_names [ month ] ;
64+
65+ calendar_header_year . innerHTML = year ;
66+
67+ let first_day = new Date ( year , month ) ;
68+
69+
70+ for ( let i = 0 ; i <= days_of_month [ month ] + first_day . getDay ( ) - 1 ; i ++ ) {
71+
72+ let day = document . createElement ( 'div' ) ;
73+
74+ if ( i >= first_day . getDay ( ) ) {
75+ day . innerHTML = i - first_day . getDay ( ) + 1 ;
76+
77+ if ( i - first_day . getDay ( ) + 1 === currentDate . getDate ( ) &&
78+ year === currentDate . getFullYear ( ) &&
79+ month === currentDate . getMonth ( )
80+ ) {
81+ day . classList . add ( 'current-date' ) ;
82+ }
83+ }
84+ calendar_days . appendChild ( day ) ;
85+ }
86+ } ;
87+
88+ let month_list = calendar . querySelector ( '.month-list' ) ;
89+ month_names . forEach ( ( e , index ) => {
90+ let month = document . createElement ( 'div' ) ;
91+ month . innerHTML = `<div>${ e } </div>` ;
92+
93+ month_list . append ( month ) ;
94+ month . onclick = ( ) => {
95+ currentMonth . value = index ;
96+ generateCalendar ( currentMonth . value , currentYear . value ) ;
97+ month_list . classList . replace ( 'show' , 'hide' ) ;
98+ dayTextFormate . classList . remove ( 'hideTime' ) ;
99+ dayTextFormate . classList . add ( 'showtime' ) ;
100+ timeFormate . classList . remove ( 'hideTime' ) ;
101+ timeFormate . classList . add ( 'showtime' ) ;
102+ dateFormate . classList . remove ( 'hideTime' ) ;
103+ dateFormate . classList . add ( 'showtime' ) ;
104+ } ;
105+ } ) ;
106+
107+ ( function ( ) {
108+ month_list . classList . add ( 'hideonce' ) ;
109+ } ) ( ) ;
110+ document . querySelector ( '#pre-year' ) . onclick = ( ) => {
111+ -- currentYear . value ;
112+ generateCalendar ( currentMonth . value , currentYear . value ) ;
113+ } ;
114+ document . querySelector ( '#next-year' ) . onclick = ( ) => {
115+ ++ currentYear . value ;
116+ generateCalendar ( currentMonth . value , currentYear . value ) ;
117+ } ;
118+
119+ let currentDate = new Date ( ) ;
120+ let currentMonth = { value : currentDate . getMonth ( ) } ;
121+ let currentYear = { value : currentDate . getFullYear ( ) } ;
122+ generateCalendar ( currentMonth . value , currentYear . value ) ;
123+
124+ const todayShowTime = document . querySelector ( '.time-formate' ) ;
125+ const todayShowDate = document . querySelector ( '.date-formate' ) ;
126+
127+ const currshowDate = new Date ( ) ;
128+ const showCurrentDateOption = {
129+ year : 'numeric' ,
130+ month : 'long' ,
131+ day : 'numeric' ,
132+ weekday : 'long' ,
133+ } ;
134+ const currentDateFormate = new Intl . DateTimeFormat (
135+ 'en-US' ,
136+ showCurrentDateOption
137+ ) . format ( currshowDate ) ;
138+ todayShowDate . textContent = currentDateFormate ;
139+ setInterval ( ( ) => {
140+ const timer = new Date ( ) ;
141+ const option = {
142+ hour : 'numeric' ,
143+ minute : 'numeric' ,
144+ second : 'numeric' ,
145+ } ;
146+ const formateTimer = new Intl . DateTimeFormat ( 'en-us' , option ) . format ( timer ) ;
147+ let time = `${ `${ timer . getHours ( ) } ` . padStart (
148+ 2 ,
149+ '0'
150+ ) } :${ `${ timer . getMinutes ( ) } ` . padStart (
151+ 2 ,
152+ '0'
153+ ) } : ${ `${ timer . getSeconds ( ) } ` . padStart ( 2 , '0' ) } `;
154+ todayShowTime . textContent = formateTimer ;
155+ } , 1000 ) ;
156+
0 commit comments