Tự Vẽ Một Carlendar Bằng Javascript Thuần

Ebudezain

Ebudezain

  • kiến thức web
  • nodejs
  • react
  • php
    • php core
    • laravel
  • Java
    • java core
    • android
  • SEO
  • liên hệ

đôi khi trong 1 project bạn cần tạo ra 1 calendar vẽ bằng javascript và bạn không biết nên bắt đầu từ đâu. Hôm nay mình chia sẽ cách vẽ 1 calendar bằng javascript đơn giản.

tự vẽ một carlendar bằng javascript thuần 2021-01-11 2096 lượt xem Cao Thị Ngọc Mục lục [ hide ]
  • Yêu cầu
  • Vài chú ý trước khi vẽ calendar
    • hàm getDay javascript
  • Bắt Đầu vẽ Calendar javascript pure
    • Cập nhật hàm createBodyCalendar để có carlendar body
    • Cần Thêm css cho body
    • Cập nhật hàm createHeaderCalendar để có carlendar header
    • Cập nhật thêm css cho heading
    • Full code
  • Kết quả và ghi chú nếu muốn phát triển thêm
    • thành quả
    • ghi chú
ahihi đồ ngốc trương thanh hùng nèhùng ebudezainđọc dữ liệu hộ bốahihi đồ ngốc trương thanh hùng nèđọc dữ liệu hộ bốhùng ebudezainhùng ebudezainhùng thông minh lắm

Bài này mình chỉ hướng dẫn bạn tạo 1 carlendar căn bản với Pure JavaScript (không sài thư viện), bạn có thể css thêm, hoặc viết các vấn đề sự kiện thậm chí kế thừa javascript các kiểu con đà điểu nhưng đó là bạn vì mình muốn viết 1 bài dành đơn giản ai đọc cũng sẽ dễ dàng hiểu và sử dụng được.

tôi thích vậy đóhùng ebudezainahihi đồ ngốc trương thanh hùng nèđọc dữ liệu hộ bố

Yêu cầu

hùng đẹp traihùng ebudezainhùng ebudezaintôi thích vậy đóhùng ebudezainbài viết được viết bởi trương thanh hùng https://ebudezain.com/hùng thông minh lắmahihi đồ ngốc trương thanh hùng nè

Đương nhiên bạn cần biết về javascript và chỉ thế thôi 😄 vì bài này mình muốn đơn giản nên không kế thừa hay prototype gì cả nên dễ đọc dễ hiểu mà

hùng đẹp traibài viết được viết bởi trương thanh hùng https://ebudezain.com/tôi thích vậy đóhùng đẹp traihùng thông minh lắm

Vài chú ý trước khi vẽ calendar

hùng thông minh lắm

Lưu ý để vẽ calendar js bạn cần quan tâm đến việc vẽ 1 dom html bằng js. Cú pháp:

hùng ebudezainđọc dữ liệu hộ bốhùng ebudezain/// tạo thẻ div var div = document.createElement("div") /// tạo class cho div div.className = "class-name"ahihi đồ ngốc trương thanh hùng nèđọc dữ liệu hộ bốbài viết được viết bởi trương thanh hùng https://ebudezain.com/hùng đẹp traihùng thông minh lắmahihi đồ ngốc trương thanh hùng nè

Mình sẽ dùng thẻ div để vẽ từng ô từng cell chứ không dùng thẻ table 😄 Nhưng nếu bạn thích thì bạn cứ dùng table.

tôi thích vậy đóhùng đẹp trai

hàm getDay javascript

hùng đẹp trai

Phương thức getDay() được dùng để lấy THỨ của một đối tượng ngày tháng.

tôi thích vậy đó

(THỨ có giá trị 0, 1, 2, 3, 4, 5, 6 tương ứng với CN, T2, T3, T4, T5, T6, T7).

hùng ebudezain

Cú pháp

đọc dữ liệu hộ bốhùng đẹp traiahihi đồ ngốc trương thanh hùng nèđối_tượng_ngày_tháng.getDay(); /// mình muốn lấy thứ của ngày đầu tiên của tháng + năm var first_day = (new Date(this.selectYear, this.selectMonth)).getDay()hùng thông minh lắmhùng thông minh lắm

Bắt Đầu vẽ Calendar javascript pure

hùng đẹp traiahihi đồ ngốc trương thanh hùng nèhùng thông minh lắmhùng ebudezaintôi thích vậy đó

nếu bạn đã có kiến thức về javascript thì đọc đoạn code sau bạn sẽ không hề thấy khó hiểu

hùng thông minh lắmtôi thích vậy đótôi thích vậy đó<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>tự viết calendar</title> </head> <body> <div id="calendar"></div> <script> var today = new Date() var currentMonth = today.getMonth() var currentYear = today.getFullYear() /// tạm thời chưa dùng tới nhưng cứ khởi tạo trước 2 biến LABEL_MONTH, LABEL_DATE /// để hàm createBodyCalendar sẽ dùng sau này const LABEL_MONTH = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"] const LABEL_DATE = [ "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"] /// tạo 2 biến này để xác định tháng và năm mình sẽ lấy làm mốc để vẽ var selectYear = currentYear var selectMonth = currentMonth //// bắt đầu vẽ calendar drawCalendar(selectMonth, selectYear) /// function này sẽ tạo dom calendar dựa vào month, year được truyền vào function drawCalendar(month, year){ /// tạo thẻ cha bao calendar var calendar = document.createElement("div") calendar.className = 'calendar' /// tạo header var headCalendar = createHeaderCalendar(month, year) /// thêm header calendar dom vào calendar chính calendar.appendChild(headCalendar) /// tạo thân calendar var bodyCalendar = createBodyCalendar(month, year) calendar.appendChild(bodyCalendar) //// cuối cùng thêm vào dom html của page document.getElementById("calendar").appendChild(calendar) } /** * function này để tạo phần header cho calendar có cái nút next và prev * để biết next là qua tháng nào năm nào chúng ta cần truyền vào biến month và year */ function createHeaderCalendar(month, year){ //// tạm thời return ra cái dom có cái text header var header = document.createElement("div") header.className = 'calendar__header' header.innerText = 'đây là phần header calendar' return header } /** * function này để tạo phần cell cho calendar quan trọng nhất * để biết chúng ta vẽ calendar cho tháng năm nào cần truyền vào biến month và year */ function createBodyCalendar(month, year){ //// tạm thời return ra cái dom có cái text header var body = document.createElement("div") body.className = 'calendar__body' body.innerText = 'đây là phần body calendar' return body } </script> </body> </html>hùng thông minh lắmđọc dữ liệu hộ bố

kết quả :

hùng ebudezainahihi đồ ngốc trương thanh hùng nèahihi đồ ngốc trương thanh hùng nèhùng ebudezainbài viết được viết bởi trương thanh hùng https://ebudezain.com/hùng thông minh lắmđọc dữ liệu hộ bố

đọc dữ liệu hộ bốtôi thích vậy đóahihi đồ ngốc trương thanh hùng nèahihi đồ ngốc trương thanh hùng nèhùng ebudezain

giải thích 1 chút:

  • drawCalendar là hàm chạy chính, ban đầu truyền tháng hiện tại và năm hiện tại làm mặc định.
  • hàm createHeaderCalendar sẽ tạo header có nút next pre và hiện thị ngày tháng năm
  • hàm createBodyCalendar sẽ tạo phần quan trọng nhất của calendar, các cell sẽ được vẽ dạng dive nên nhớ thêm css nhé
ahihi đồ ngốc trương thanh hùng nèđọc dữ liệu hộ bốahihi đồ ngốc trương thanh hùng nè

Cập nhật hàm createBodyCalendar để có carlendar body

hùng thông minh lắmbài viết được viết bởi trương thanh hùng https://ebudezain.com/hùng thông minh lắmhùng ebudezain/** * function này để tạo phần cell cho calendar quan trọng nhất * để biết chúng ta vẽ calendar cho tháng năm nào cần truyền vào biến month và year */ function createBodyCalendar(month, year){ var body = document.createElement("div") body.className = 'calendar__body' // creating all cells var dateLoop = 1; // tạo cells, 1 tháng có 6 dòng for (let i = 0; i < 6; i++) { // tạo 1 div bọc các ngày trong 1 tuần lại ( nếu bạn vẽ bằng table thì đây là thẻ tr) var row = document.createElement("div") row.className = "calendar__row" // trong 1 tuần luôn có 7 ngày ( nếu bạn vẽ bằng table thì đây là thẻ td ) for (let j = 0; j < 7; j++) { /// hàm xác định thứ đầu tiên của tháng. /// cái này rất quan trọng trong việc vẽ calendar /// vì bạn cần xác định calendar này được vẽ vào thứ mấy sau đó bạn for cho hết tháng var firstDay = (new Date(year, month)).getDay() /// tạo cell ( ô ) var cell = document.createElement("div") cell.className = "calendar__cell" if (i === 0 && j < firstDay) { /// ngày của tháng trước ( kiểu như disable đi ) cell.innerHTML = "-" } else if (dateLoop > daysInMonth(month, year)) { //// ngày của tháng sau ( kiểu như disable đi ) cell.innerHTML = "-" } else { cell.innerText = dateLoop dateLoop++; } row.appendChild(cell) } // appending each row into calendar body. body.appendChild(row) } return body } // check how many days in a month function daysInMonth(iMonth, iYear) { return 32 - new Date(iYear, iMonth, 32).getDate(); }hùng đẹp traihùng thông minh lắmbài viết được viết bởi trương thanh hùng https://ebudezain.com/đọc dữ liệu hộ bố

Cần Thêm css cho body

tôi thích vậy đóhùng đẹp traiahihi đồ ngốc trương thanh hùng nè<style> /* mình giới hạn chiều rộng calendar, bạn xóa max-width này đi nghen */ #calendar{ max-width: 500px; } /* css cho calendar */ .calendar{ display: block } .calendar__body{ display: block } .calendar__row{ display: flex; } .calendar__cell{ flex: 1; padding: 10px; background-color: #ccc; border: 1px solid #f2f2f2; } </style>hùng đẹp traibài viết được viết bởi trương thanh hùng https://ebudezain.com/đọc dữ liệu hộ bốtôi thích vậy đótôi thích vậy đóahihi đồ ngốc trương thanh hùng nè

kết quả:

tôi thích vậy đóhùng đẹp traihùng thông minh lắmđọc dữ liệu hộ bốhùng thông minh lắmtôi thích vậy đóhùng ebudezain

đọc dữ liệu hộ bốbài viết được viết bởi trương thanh hùng https://ebudezain.com/hùng ebudezainđọc dữ liệu hộ bốđọc dữ liệu hộ bố

Cập nhật hàm createHeaderCalendar để có carlendar header

bài viết được viết bởi trương thanh hùng https://ebudezain.com/tôi thích vậy đóbài viết được viết bởi trương thanh hùng https://ebudezain.com//** * function này để tạo phần header cho calendar có cái nút next và prev * để biết next là qua tháng nào năm nào chúng ta cần truyền vào biến month và year */ function createHeaderCalendar(month, year){ //// tạm thời return ra cái dom có cái text header var header = document.createElement("div") header.className = 'calendar__header' /// bắt đầu tạo phần nut next, pre var headingTop = document.createElement("div") headingTop.className = "calendar__header-top" /// next var prev = document.createElement("button") prev.innerText = "prev" prev.onclick = function(){ //// set lại cái biến selectMonth /// bạn đang nghĩ chỉ cần trừ 1 lên nhưng cẩn thận /// nếu tháng 12 đem cộng 1 thì ra tháng 13 😄 var indexDate = new Date(selectYear, month - 1, 1 ) selectMonth = indexDate.getMonth() selectYear = indexDate.getFullYear() /// cho vẽ lại với 2 giá trị mới drawCalendar(selectMonth, selectYear) } headingTop.appendChild(prev) /// year index var yearIndex = document.createElement("span") yearIndex.innerText = `Tháng ${selectMonth + 1} năm ${selectYear}` headingTop.appendChild(yearIndex) /// next var next = document.createElement("button") next.innerText = "next" next.onclick = function(){ //// set lại cái biến selectMonth /// bạn đang nghĩ chỉ cần cộng 1 lên nhưng cẩn thận /// nếu tháng 12 đem cộng 1 thì ra tháng 13 😄 var indexDate = new Date(selectYear, month + 1, 1 ) selectMonth = indexDate.getMonth() selectYear = indexDate.getFullYear() /// cho vẽ lại với 2 giá trị mới drawCalendar(selectMonth, selectYear) } headingTop.appendChild(next) header.appendChild(headingTop) /// bắt đầu tạo phần label thứ 2, thứ 3, thứ 4, thứ 5 .... var titleDays = document.createElement("div") titleDays.className = "calendar__row calendar__row-head" for(var head = 0; head < LABEL_DATE.length; head++){ var thead = document.createElement("div") thead.className = "calendar__cell calendar__cell-head" thead.innerHTML = LABEL_DATE[head] titleDays.appendChild(thead) } header.appendChild(titleDays) /// kết thúc tạo phần label return header }đọc dữ liệu hộ bốhùng ebudezain

kết quả: nút next prev đã hoạt động:

tôi thích vậy đóbài viết được viết bởi trương thanh hùng https://ebudezain.com/hùng đẹp traihùng đẹp traihùng ebudezainbài viết được viết bởi trương thanh hùng https://ebudezain.com/ahihi đồ ngốc trương thanh hùng nèhùng ebudezain

hùng thông minh lắmtôi thích vậy đóhùng ebudezain

Cập nhật thêm css cho heading

hùng ebudezainhùng ebudezaintôi thích vậy đó .calendar__header-top{ display: flex; justify-content: space-between; } .calendar__header-top button{ background-color: #0d6efd; color: #fff; border: 2px solid #0d6efd; text-decoration: null; white-space: normal; word-wrap: break-word; cursor: pointer; user-select: none; padding: .375rem .75rem; margin: .375rem; -webkit-border-radius: .125rem; border-radius: .125rem; }hùng ebudezainhùng đẹp trai

Full code

hùng thông minh lắmhùng ebudezaintôi thích vậy đó<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>tự viết calendar</title> <style> /* mình giới hạn chiều rộng calendar, bạn xóa max-width này đi nghen */ #calendar{ max-width: 500px; } /* css cho calendar */ .calendar{ display: block } .calendar__body{ display: block } .calendar__row{ display: flex; } .calendar__cell{ flex: 1; padding: 10px; background-color: #ccc; border: 1px solid #f2f2f2; } .calendar__header-top{ display: flex; justify-content: space-between; } .calendar__header-top button{ background-color: #0d6efd; color: #fff; border: 2px solid #0d6efd; text-decoration: null; white-space: normal; word-wrap: break-word; cursor: pointer; user-select: none; padding: .375rem .75rem; margin: .375rem; -webkit-border-radius: .125rem; border-radius: .125rem; } </style> </head> <body> <div id="calendar"></div> <script> var today = new Date() var currentMonth = today.getMonth() var currentYear = today.getFullYear() /// tạm thời chưa dùng tới nhưng cứ khởi tạo trước 2 biến LABEL_MONTH, LABEL_DATE /// để hàm createBodyCalendar sẽ dùng sau này const LABEL_MONTH = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"] const LABEL_DATE = [ "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"] /// tạo 2 biến này để xác định tháng và năm mình sẽ lấy làm mốc để vẽ var selectYear = currentYear var selectMonth = currentMonth //// bắt đầu vẽ calendar drawCalendar(selectMonth, selectYear) /// function này sẽ tạo dom calendar dựa vào month, year được truyền vào function drawCalendar(month, year){ /// tạo thẻ cha bao calendar var calendar = document.createElement("div") calendar.className = 'calendar' /// tạo header var headCalendar = createHeaderCalendar(month, year) /// thêm header calendar dom vào calendar chính calendar.appendChild(headCalendar) /// tạo thân calendar var bodyCalendar = createBodyCalendar(month, year) calendar.appendChild(bodyCalendar) //// cuối cùng thêm vào dom html của page document.getElementById("calendar").innerHTML = '' document.getElementById("calendar").appendChild(calendar) } /** * function này để tạo phần header cho calendar có cái nút next và prev * để biết next là qua tháng nào năm nào chúng ta cần truyền vào biến month và year */ function createHeaderCalendar(month, year){ //// tạm thời return ra cái dom có cái text header var header = document.createElement("div") header.className = 'calendar__header' /// bắt đầu tạo phần nut next, pre var headingTop = document.createElement("div") headingTop.className = "calendar__header-top" /// next var prev = document.createElement("button") prev.innerText = "prev" prev.onclick = function(){ //// set lại cái biến selectMonth /// bạn đang nghĩ chỉ cần trừ 1 lên nhưng cẩn thận /// nếu tháng 12 đem cộng 1 thì ra tháng 13 😄 var indexDate = new Date(selectYear, month - 1, 1 ) selectMonth = indexDate.getMonth() selectYear = indexDate.getFullYear() /// cho vẽ lại với 2 giá trị mới drawCalendar(selectMonth, selectYear) } headingTop.appendChild(prev) /// year index var yearIndex = document.createElement("span") yearIndex.innerText = `Tháng ${selectMonth + 1} năm ${selectYear}` headingTop.appendChild(yearIndex) /// next var next = document.createElement("button") next.innerText = "next" next.onclick = function(){ //// set lại cái biến selectMonth /// bạn đang nghĩ chỉ cần cộng 1 lên nhưng cẩn thận /// nếu tháng 12 đem cộng 1 thì ra tháng 13 😄 var indexDate = new Date(selectYear, month + 1, 1 ) selectMonth = indexDate.getMonth() selectYear = indexDate.getFullYear() /// cho vẽ lại với 2 giá trị mới drawCalendar(selectMonth, selectYear) } headingTop.appendChild(next) header.appendChild(headingTop) /// bắt đầu tạo phần label thứ 2, thứ 3, thứ 4, thứ 5 .... var titleDays = document.createElement("div") titleDays.className = "calendar__row calendar__row-head" for(var head = 0; head < LABEL_DATE.length; head++){ var thead = document.createElement("div") thead.className = "calendar__cell calendar__cell-head" thead.innerHTML = LABEL_DATE[head] titleDays.appendChild(thead) } header.appendChild(titleDays) /// kết thúc tạo phần label return header } /** * function này để tạo phần cell cho calendar quan trọng nhất * để biết chúng ta vẽ calendar cho tháng năm nào cần truyền vào biến month và year */ function createBodyCalendar(month, year){ var body = document.createElement("div") body.className = 'calendar__body' // creating all cells var dateLoop = 1; // tạo cells, 1 tháng có 6 dòng for (let i = 0; i < 6; i++) { // tạo 1 div bọc các ngày trong 1 tuần lại ( nếu bạn vẽ bằng table thì đây là thẻ tr) var row = document.createElement("div") row.className = "calendar__row" // trong 1 tuần luôn có 7 ngày ( nếu bạn vẽ bằng table thì đây là thẻ td ) for (let j = 0; j < 7; j++) { /// hàm xác định thứ đầu tiên của tháng. /// cái này rất quan trọng trong việc vẽ calendar /// vì bạn cần xác định calendar này được vẽ vào thứ mấy sau đó bạn for cho hết tháng var firstDay = (new Date(year, month)).getDay() /// tạo cell ( ô ) var cell = document.createElement("div") cell.className = "calendar__cell" if (i === 0 && j < firstDay) { /// ngày của tháng trước ( kiểu như disable đi ) cell.innerHTML = "-" } else if (dateLoop > daysInMonth(month, year)) { //// ngày của tháng sau ( kiểu như disable đi ) cell.innerHTML = "-" } else { cell.innerText = dateLoop dateLoop++; } row.appendChild(cell) } // appending each row into calendar body. body.appendChild(row) } return body } // check how many days in a month code from https://dzone.com/articles/determining-number-days-month function daysInMonth(iMonth, iYear) { return 32 - new Date(iYear, iMonth, 32).getDate(); } </script> </body> </html>hùng đẹp traiđọc dữ liệu hộ bốhùng thông minh lắmhùng ebudezainahihi đồ ngốc trương thanh hùng nè

Kết quả và ghi chú nếu muốn phát triển thêm

hùng đẹp traiđọc dữ liệu hộ bố

thành quả

đọc dữ liệu hộ bốbài viết được viết bởi trương thanh hùng https://ebudezain.com/ hùng ebudezainhùng ebudezainhùng thông minh lắmhùng đẹp trai

ghi chú

hùng đẹp trai

trong function createBodyCalendar, các ngày của tháng trước chưa được tính toán ra, và tương tự ngày của tháng sau cũng chưa đc tính ra. bạn nên tính toán để show ra cái ngày đó để hoàn thiện hơn. nếu bạn muốn tìm hiểu kỹ hơn thì theo dõi phần 2 của việc tạo 1 calendar nha, vẽ calendar bằng javascript pure core phần 2 - Code optimization . Cảm ơn Bạn quan tâm bài viết

chủ đề [JAVASCRIPT Cơ bản] javascript core

[JAVASCRIPT Cơ bản] javascript core

2020-10-10
Chủ đề này nói hầu hết là thuộc về javascript. 1 n...
những tag front-end developer

front-end developer

2020-09-13
excerpt front-end developer
calendar

calendar

2021-01-14
Chủ đề này để được ứng dụng trong quản lý lịch, th...
bài viết trong chủ đề 3 con đường để Copy Objects trong JavaScript

3 con đường để Copy Objects trong JavaScript

2020-10-10
cách copy object trong javascript. trong hướng dẫn...
vẽ calendar bằng javascript pure core phần 2 - Code optimization

vẽ calendar bằng javascript pure core phần 2 - Code optimization

2021-01-13
ở phần 1 mình đã hướng dẫn bạn tạo calendar simple...
JavaScript Primitive vs. Reference Values

JavaScript Primitive vs. Reference Values

2020-10-10
JavaScript Primitive vs. Reference Values
bài viết mớidùng schema để làm việc với mongoose trong nodejs mongodb

dùng schema để làm việc với mongoose trong nodejs mongodb

2021-07-04
Để làm việc với Mongoose sau khi thực hi...
Hướng dẫn cài đặt Nginx PHP-FPM trên MacOS sử dụng Homebrew

Hướng dẫn cài đặt Nginx PHP-FPM trên MacOS sử dụng Homebrew

2020-12-17
Trong quá trình phát triển web với php c...
Cài đặt Nginx sử dụng Docker

Cài đặt Nginx sử dụng Docker

2022-03-19
Nếu sử dụng Docker thì việc cài đặt Ngin...
cài đặt nginx php postgre cho vps

cài đặt nginx php postgre cho vps

2020-10-16
hướng dẫn cài php trong vps. PHP là một ...
cách validate react functional - sử dụng react form input

cách validate react functional - sử dụng react form input

2021-08-10
sử dụng form validate
Tối ưu Queries Database và tăng Performance trong laravel

Tối ưu Queries Database và tăng Performance trong laravel

2022-02-14
Xử lý query database tối ưu trong larave...
bài viết có liên quanXem và Quản lý user - group và phân quyền trên linux

Xem và Quản lý user - group và phân quyền trên linux

2021-01-02
Mình là dev web và việc phân chia quyền ...
fix lỗi fatal: Authentication failed for https Git gỡ bỏ xác thực mật khẩu

fix lỗi fatal: Authentication failed for https Git gỡ bỏ xác thực mật khẩu

2021-08-23
Mọi thứ đang bình thường thì nay là 2021...
Cài đặt Flutter trên MacOS 2021

Cài đặt Flutter trên MacOS 2021

2021-03-01
Flutter là 1 framework do google phát tr...
phân biệt trình biên dịch - thông dịch

phân biệt trình biên dịch - thông dịch

2020-09-30
phân biệt trình biên dịch - thông dịch
Hướng dẫn cơ bản về cách kết hợp Laravel 8 với ReactJS React Router 2021

Hướng dẫn cơ bản về cách kết hợp Laravel 8 với ReactJS React Router 2021

2021-07-20
Chủ đề hướng dẫn Laravel 8 ReactJS, chún...
Run chương trình php với command

Run chương trình php với command

2020-09-30
Sau khi cài đặt xong xampp trong windows...

Ebudezain blog - chia sẽ kiến thức lập trình

Ebudezain Blog là trang chuyên chia sẻ các kiến thức về lập trình nhằm mang lại cho lập trình viên mới có kiến thức lập trình nền tảng nhất dưới góc nhìn của mình.

EBUDEZAIN

Ebudezain - chúng tôi là đơn vị thiết kế web uy tín, chất lượng, với chi phí tiết kiệm. Nếu bạn có nhu cầu thiết kế web, hãy gọi cho chúng tôi.

0674, Xã Bình Giã,Huyện Châu Đức Tỉnh Bà Rịa - Vũng Tàu,Việt Nam

+84343086424

thanhhung.dev@gmail.com

[PHP TỔNG HỢP] các kiến thức lập trình về php kiến thức database DynamoDB WebRTC trong browser Nha Đam marketing WebRTC trong android lodash Flutter. redis [JAVASCRIPT Cơ bản] javascript core CI CD React Native docker fix lỗi kiến thức front-end Unit test laravel Shell script GraphQL MOMENT JS git cơ bản SEO - Search Engine Optimization android bảng giá website Amazon Web Services (AWS) flutter cơ bản đến nâng cao nextjs [PHP CƠ BẢN] PHP CORE - Lập trình căn bản với php Load balancing laravel [JAVA Cơ bản] java core [NODEJS CƠ BẢN] platform nodejs - V8 JavaScript Runtime flutter tutorial VScode javascript linux grunt Unit test trong reactjs react kiến thức web React Native nâng cao mongo flutter fix lỗi linh tinh thao tác với vps linux công ty tui front-end developer aws php developer postgre single page applycation google drive Tự học React native Amazon Web Services (AWS) - Amplify github cli lưu trữ với google drive RESTful API loạt bài lập trình shell script bash script calendar kiến thức server linux sass scss - preprocessor nodejs macbook

Từ khóa » Cách Tạo Lịch Html