[jQuery UI] ๐Ÿ—“๏ธ Datepicker ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์‚ฌ์šฉ๋ฒ•

Daisy๐ŸŒทยท2024๋…„ 2์›” 21์ผ
0

๐Ÿ“š archive๐Ÿ“š

๋ชฉ๋ก ๋ณด๊ธฐ
5/14

๐Ÿ—“๏ธ Datepicker๋ž€?

์‚ฌ์šฉ์ž๊ฐ€ ์บ˜๋ฆฐ๋”์—์„œ ๋‚ ์งœ๋ฅผ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋Š” jQuery ๊ธฐ๋ฐ˜์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

๐Ÿ—“๏ธ Datepicker ์œ„์ ฏ ์ ์šฉํ•˜๊ธฐ

1. jQuery, jQuery UI ํŒŒ์ผ์„ ๋‹ค์šด๋ฐ›์•„ ์›น ํŽ˜์ด์ง€์— ๋กœ๋“œ

  • jQuery๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๋ฏ€๋กœ, jQuery ํŒŒ์ผ์€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ(.js ํŒŒ์ผ) ํ˜•ํƒœ๋กœ ์กด์žฌํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ์›น ํŽ˜์ด์ง€์—์„œ jQuery๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” jQuery ํŒŒ์ผ์„ ๋จผ์ € ์›น ํŽ˜์ด์ง€์— ๋กœ๋“œ(load)ํ•ด์•ผ ํ•œ๋‹ค.
  • ์ตœ์‹  ๋ฒ„์ „์˜ jQuery ํŒŒ์ผ์€ ๊ณต์‹ ์‚ฌ์ดํŠธ์—์„œ ๋‹ค์šด๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค.
  • ์ตœ์‹  ๋ฒ„์ „์˜ jQuery UI ํŒŒ์ผ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๊ณต์‹ ์‚ฌ์ดํŠธ์—์„œ ๋‹ค์šด๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค.
  • ๋‹ค์šด๋ฐ›์€ ํŒŒ์ผ์„ ์„œ๋ฒ„์— ์ €์žฅํ•˜๊ณ  <script> ํƒœ๊ทธ์™€ <link> ํƒœ๊ทธ๋ฅผ ์›น ํŽ˜์ด์ง€์˜ <head> ํƒœ๊ทธ ๋‚ด์— ์‚ฝ์ž…ํ•˜๋ฉด ๋œ๋‹ค.
  • ๐Ÿšจ jQuery UI๋Š” jQuery๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋งŒ๋“ค์–ด์กŒ๊ธฐ ๋•Œ๋ฌธ์— jQuery UI๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ๋จผ์ € jQuery๋ฅผ load ํ•ด์•ผ ํ•œ๋‹ค. ๐Ÿšจ

๐Ÿ‘ฉ๐Ÿปโ€๐Ÿ’ป ์˜ˆ์ œ ์ฝ”๋“œ

<head>
  <link href="ํŒŒ์ผ๊ฒฝ๋กœ/์ œ์ด์ฟผ๋ฆฌ-ui-css-ํŒŒ์ผ๋ช….css" rel="stylesheet" type="text/css"/>
  // jQuery ๋จผ์ € load
  <script src="/ํŒŒ์ผ๊ฒฝ๋กœ/์ œ์ด์ฟผ๋ฆฌ-ํŒŒ์ผ๋ช….js" type="text/javascript"></script>
  // jQuery UI load
  <script src="/ํŒŒ์ผ๊ฒฝ๋กœ/์ œ์ด์ฟผ๋ฆฌ-UI-ํŒŒ์ผ๋ช….js" type="text/javascript"></script>
</head>

2. datepicker๋ฅผ ์ ์šฉํ•  input ์š”์†Œ์— ๋Œ€ํ•ด datepicker๋ฅผ ํ˜ธ์ถœ

๐Ÿ‘ฉ๐Ÿปโ€๐Ÿ’ป ์˜ˆ์ œ ์ฝ”๋“œ

<script>
  $(function () {
    $("#datepicker").datepicker({
      showOn: "both" // button > ๋ฒ„ํŠผ์„ ํด๋ฆญํ•  ๋•Œ datepicker ํ‘œ์‹œ. focus > input ํ•„๋“œ๊ฐ€ ํฌ์ปค์Šค๋ฅผ ๋ฐ›์„ ๋•Œ ํ‘œ์‹œ. both > ๋‘ ์ด๋ฒคํŠธ ์ค‘ ํ•˜๋‚˜๊ฐ€ ๋ฐœ์ƒํ•  ๋•Œ ํ‘œ์‹œ.
      , buttonImage: "../images/calender.svg" // datepicker๋ฅผ ์‚ฌ์šฉํ•  ๋ฒ„ํŠผ ์ด๋ฏธ์ง€์˜ URL
      , buttonImageOnly: true // ์œ„์—์„œ ์„ค์ •ํ•œ buttonImage๋ฅผ button ์š”์†Œ ์•ˆ์— ๋ Œ๋”๋ง ํ•˜์ง€ ์•Š๊ณ  ๋‹จ๋…์œผ๋กœ ๋ Œ๋”๋ง
      , buttonText: "์„ ํƒ" // ๋ฒ„ํŠผ์— ํ‘œ์‹œ๋˜๋Š” ๊ธ€์ž
      , changeYear: true // dropdown์œผ๋กœ year ์„ ํƒ ๊ฐ€๋Šฅ
      , changeMonth: true // dropdown์œผ๋กœ month ์„ ํƒ ๊ฐ€๋Šฅ
      , dateFormat: 'yy-mm-dd' // ํ‘œ์‹œ๋˜๋Š” ๋‚ ์งœ์˜ ํ˜•์‹
      , dayNames: ['์ผ์š”์ผ', '์›”์š”์ผ', 'ํ™”์š”์ผ', '์ˆ˜์š”์ผ', '๋ชฉ์š”์ผ', '๊ธˆ์š”์ผ', 'ํ† ์š”์ผ'] // ์ผ์š”์ผ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๋Š” ์š”์ผ ์ด๋ฆ„ ๋ชฉ๋ก
      , dayNamesMin: ['์ผ', '์›”', 'ํ™”', '์ˆ˜', '๋ชฉ', '๊ธˆ', 'ํ† '] // Datepicker ๋‚ด์—์„œ ์—ด ๋จธ๋ฆฌ๊ธ€๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์ผ์š”์ผ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๋Š” ์ตœ์†Œํ™”๋œ ์š”์ผ ์ด๋ฆ„ ๋ชฉ๋ก 
      , maxDate: "+5y" // ์„ ํƒํ•  ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€ ๋‚ ์งœ (+1D:ํ•˜๋ฃจํ›„, -1M:ํ•œ๋‹ฌํ›„, -1Y:์ผ๋…„ํ›„)    
      , minDate: "-5Y" // ์„ ํƒํ•  ์ˆ˜ ์žˆ๋Š” ์ตœ์†Œ ๋‚ ์งœ (-1D:ํ•˜๋ฃจ์ „, -1M:ํ•œ๋‹ฌ์ „, -1Y:์ผ๋…„์ „)
      , monthNames: ['1์›”', '2์›”', '3์›”', '4์›”', '5์›”', '6์›”', '7์›”', '8์›”', '9์›”', '10์›”', '11์›”', '12์›”'] // 1์›”๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๋Š” ์›” ์ด๋ฆ„ ๋ชฉ๋ก
      , monthNamesShort: ['1์›”', '2์›”', '3์›”', '4์›”', '5์›”', '6์›”', '7์›”', '8์›”', '9์›”', '10์›”', '11์›”', '12์›”'] // Datepicker header์˜ month์— ์‚ฌ์šฉ๋˜๋Š” ์›” ์ด๋ฆ„ ๋ชฉ๋ก
      , showMonthAfterYear: true // Datepicker header์—์„œ ํ‘œ์‹œ ์ˆœ์„œ๊ฐ€ ์—ฐ๋„-์›”์ด ๋˜๋„๋ก
      , showOtherMonths: true // ํ˜„์žฌ ์›”์˜ ์‹œ์ž‘ ๋˜๋Š” ๋์— ๋‹ค๋ฅธ ์›”์˜ ๋‚ ์งœ๋ฅผ ํ‘œ์‹œํ•˜๊ฒ ๋‹ค. (์„ ํƒ์€ ๋ถˆ๊ฐ€. ์ด๋Ÿฌํ•œ ๋‚ ์งœ๋ฅผ ์„ ํƒํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋ ค๋ฉด selectOtherMonths ์˜ต์…˜์„ ์‚ฌ์šฉํ•  ๊ฒƒ)
      , yearSuffix: "๋…„" // Datepicker header์˜ ์—ฐ๋„ ๋’ค์— ํ‘œ์‹œํ•  ์ถ”๊ฐ€ ํ…์ŠคํŠธ
    });
    // Datepicker์˜ default ๋‚ ์งœ๋ฅผ ์„ค์ •
    $('#datepicker').datepicker('setDate', 'today'); // (-1D:ํ•˜๋ฃจ์ „, -1M:ํ•œ๋‹ฌ์ „, -1Y:์ผ๋…„์ „), (+1D:ํ•˜๋ฃจํ›„, -1M:ํ•œ๋‹ฌํ›„, -1Y:์ผ๋…„ํ›„)
  });
</script>
<input id="datepicker">

๐Ÿ—“๏ธ ๊ฒ€์ƒ‰ํ•  ๋‚ ์งœ์˜ ๋ฒ”์œ„๋ฅผ ์„ ํƒํ•˜๋Š” ๊ฒฝ์šฐ

๐Ÿ‘ฉ๐Ÿปโ€๐Ÿ’ป ์˜ˆ์ œ ์ฝ”๋“œ

<script>
  $(function () {
    $("#datepicker-from").datepicker({
      showOn: "both" // button > ๋ฒ„ํŠผ์„ ํด๋ฆญํ•  ๋•Œ datepicker ํ‘œ์‹œ. focus > input ํ•„๋“œ๊ฐ€ ํฌ์ปค์Šค๋ฅผ ๋ฐ›์„ ๋•Œ ํ‘œ์‹œ. both > ๋‘ ์ด๋ฒคํŠธ ์ค‘ ํ•˜๋‚˜๊ฐ€ ๋ฐœ์ƒํ•  ๋•Œ ํ‘œ์‹œ.
      , buttonImage: "../images/calender.svg" // datepicker๋ฅผ ์‚ฌ์šฉํ•  ๋ฒ„ํŠผ ์ด๋ฏธ์ง€์˜ URL
      , buttonImageOnly: true // ์œ„์—์„œ ์„ค์ •ํ•œ buttonImage๋ฅผ button ์š”์†Œ ์•ˆ์— ๋ Œ๋”๋ง ํ•˜์ง€ ์•Š๊ณ  ๋‹จ๋…์œผ๋กœ ๋ Œ๋”๋ง
      , buttonText: "์„ ํƒ" // ๋ฒ„ํŠผ์— ํ‘œ์‹œ๋˜๋Š” ๊ธ€์ž
      , changeYear: true // dropdown์œผ๋กœ year ์„ ํƒ ๊ฐ€๋Šฅ
      , changeMonth: true // dropdown์œผ๋กœ month ์„ ํƒ ๊ฐ€๋Šฅ
      , dateFormat: 'yy-mm-dd' // ํ‘œ์‹œ๋˜๋Š” ๋‚ ์งœ์˜ ํ˜•์‹
      , dayNames: ['์ผ์š”์ผ', '์›”์š”์ผ', 'ํ™”์š”์ผ', '์ˆ˜์š”์ผ', '๋ชฉ์š”์ผ', '๊ธˆ์š”์ผ', 'ํ† ์š”์ผ'] // ์ผ์š”์ผ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๋Š” ์š”์ผ ์ด๋ฆ„ ๋ชฉ๋ก
      , dayNamesMin: ['์ผ', '์›”', 'ํ™”', '์ˆ˜', '๋ชฉ', '๊ธˆ', 'ํ† '] // Datepicker ๋‚ด์—์„œ ์—ด ๋จธ๋ฆฌ๊ธ€๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์ผ์š”์ผ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๋Š” ์ตœ์†Œํ™”๋œ ์š”์ผ ์ด๋ฆ„ ๋ชฉ๋ก 
      , maxDate: "+5y" // ์„ ํƒํ•  ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€ ๋‚ ์งœ (+1D:ํ•˜๋ฃจํ›„, -1M:ํ•œ๋‹ฌํ›„, -1Y:์ผ๋…„ํ›„)    
      , minDate: "-5Y" // ์„ ํƒํ•  ์ˆ˜ ์žˆ๋Š” ์ตœ์†Œ ๋‚ ์งœ (-1D:ํ•˜๋ฃจ์ „, -1M:ํ•œ๋‹ฌ์ „, -1Y:์ผ๋…„์ „)
      , monthNames: ['1์›”', '2์›”', '3์›”', '4์›”', '5์›”', '6์›”', '7์›”', '8์›”', '9์›”', '10์›”', '11์›”', '12์›”'] // 1์›”๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๋Š” ์›” ์ด๋ฆ„ ๋ชฉ๋ก
      , monthNamesShort: ['1์›”', '2์›”', '3์›”', '4์›”', '5์›”', '6์›”', '7์›”', '8์›”', '9์›”', '10์›”', '11์›”', '12์›”'] // Datepicker header์˜ month์— ์‚ฌ์šฉ๋˜๋Š” ์›” ์ด๋ฆ„ ๋ชฉ๋ก
      , showMonthAfterYear: true // Datepicker header์—์„œ ํ‘œ์‹œ ์ˆœ์„œ๊ฐ€ ์—ฐ๋„-์›”์ด ๋˜๋„๋ก
      , showOtherMonths: true // ํ˜„์žฌ ์›”์˜ ์‹œ์ž‘ ๋˜๋Š” ๋์— ๋‹ค๋ฅธ ์›”์˜ ๋‚ ์งœ๋ฅผ ํ‘œ์‹œํ•˜๊ฒ ๋‹ค. (์„ ํƒ์€ ๋ถˆ๊ฐ€. ์ด๋Ÿฌํ•œ ๋‚ ์งœ๋ฅผ ์„ ํƒํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋ ค๋ฉด selectOtherMonths ์˜ต์…˜์„ ์‚ฌ์šฉํ•  ๊ฒƒ)
      , yearSuffix: "๋…„" // Datepicker header์˜ ์—ฐ๋„ ๋’ค์— ํ‘œ์‹œํ•  ์ถ”๊ฐ€ ํ…์ŠคํŠธ
    });
    // Datepicker์˜ default ๋‚ ์งœ๋ฅผ ์„ค์ •
    $("#datepicker-to").datepicker({
      showOn: "both" // button > ๋ฒ„ํŠผ์„ ํด๋ฆญํ•  ๋•Œ datepicker ํ‘œ์‹œ. focus > input ํ•„๋“œ๊ฐ€ ํฌ์ปค์Šค๋ฅผ ๋ฐ›์„ ๋•Œ ํ‘œ์‹œ. both > ๋‘ ์ด๋ฒคํŠธ ์ค‘ ํ•˜๋‚˜๊ฐ€ ๋ฐœ์ƒํ•  ๋•Œ ํ‘œ์‹œ.
      , buttonImage: "../images/calender.svg" // datepicker๋ฅผ ์‚ฌ์šฉํ•  ๋ฒ„ํŠผ ์ด๋ฏธ์ง€์˜ URL
      , buttonImageOnly: true // ์œ„์—์„œ ์„ค์ •ํ•œ buttonImage๋ฅผ button ์š”์†Œ ์•ˆ์— ๋ Œ๋”๋ง ํ•˜์ง€ ์•Š๊ณ  ๋‹จ๋…์œผ๋กœ ๋ Œ๋”๋ง
      , buttonText: "์„ ํƒ" // ๋ฒ„ํŠผ์— ํ‘œ์‹œ๋˜๋Š” ๊ธ€์ž
      , changeYear: true // dropdown์œผ๋กœ year ์„ ํƒ ๊ฐ€๋Šฅ
      , changeMonth: true // dropdown์œผ๋กœ month ์„ ํƒ ๊ฐ€๋Šฅ
      , dateFormat: 'yy-mm-dd' // ํ‘œ์‹œ๋˜๋Š” ๋‚ ์งœ์˜ ํ˜•์‹
      , dayNames: ['์ผ์š”์ผ', '์›”์š”์ผ', 'ํ™”์š”์ผ', '์ˆ˜์š”์ผ', '๋ชฉ์š”์ผ', '๊ธˆ์š”์ผ', 'ํ† ์š”์ผ'] // ์ผ์š”์ผ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๋Š” ์š”์ผ ์ด๋ฆ„ ๋ชฉ๋ก
      , dayNamesMin: ['์ผ', '์›”', 'ํ™”', '์ˆ˜', '๋ชฉ', '๊ธˆ', 'ํ† '] // Datepicker ๋‚ด์—์„œ ์—ด ๋จธ๋ฆฌ๊ธ€๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์ผ์š”์ผ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๋Š” ์ตœ์†Œํ™”๋œ ์š”์ผ ์ด๋ฆ„ ๋ชฉ๋ก 
      , maxDate: "+5y" // ์„ ํƒํ•  ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€ ๋‚ ์งœ (+1D:ํ•˜๋ฃจํ›„, -1M:ํ•œ๋‹ฌํ›„, -1Y:์ผ๋…„ํ›„)    
      , minDate: "-5Y" // ์„ ํƒํ•  ์ˆ˜ ์žˆ๋Š” ์ตœ์†Œ ๋‚ ์งœ (-1D:ํ•˜๋ฃจ์ „, -1M:ํ•œ๋‹ฌ์ „, -1Y:์ผ๋…„์ „)
      , monthNames: ['1์›”', '2์›”', '3์›”', '4์›”', '5์›”', '6์›”', '7์›”', '8์›”', '9์›”', '10์›”', '11์›”', '12์›”'] // 1์›”๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๋Š” ์›” ์ด๋ฆ„ ๋ชฉ๋ก
      , monthNamesShort: ['1์›”', '2์›”', '3์›”', '4์›”', '5์›”', '6์›”', '7์›”', '8์›”', '9์›”', '10์›”', '11์›”', '12์›”'] // Datepicker header์˜ month์— ์‚ฌ์šฉ๋˜๋Š” ์›” ์ด๋ฆ„ ๋ชฉ๋ก
      , showMonthAfterYear: true // Datepicker header์—์„œ ํ‘œ์‹œ ์ˆœ์„œ๊ฐ€ ์—ฐ๋„-์›”์ด ๋˜๋„๋ก
      , showOtherMonths: true // ํ˜„์žฌ ์›”์˜ ์‹œ์ž‘ ๋˜๋Š” ๋์— ๋‹ค๋ฅธ ์›”์˜ ๋‚ ์งœ๋ฅผ ํ‘œ์‹œํ•˜๊ฒ ๋‹ค. (์„ ํƒ์€ ๋ถˆ๊ฐ€. ์ด๋Ÿฌํ•œ ๋‚ ์งœ๋ฅผ ์„ ํƒํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋ ค๋ฉด selectOtherMonths ์˜ต์…˜์„ ์‚ฌ์šฉํ•  ๊ฒƒ)
      , yearSuffix: "๋…„" // Datepicker header์˜ ์—ฐ๋„ ๋’ค์— ํ‘œ์‹œํ•  ์ถ”๊ฐ€ ํ…์ŠคํŠธ
    });
    // Datepicker์˜ default ๋‚ ์งœ๋ฅผ ์„ค์ •  
    $('#datepicker-from').datepicker('setDate', 'today'); // (-1D:ํ•˜๋ฃจ์ „, -1M:ํ•œ๋‹ฌ์ „, -1Y:์ผ๋…„์ „), (+1D:ํ•˜๋ฃจํ›„, -1M:ํ•œ๋‹ฌํ›„, -1Y:์ผ๋…„ํ›„)
    $('#datepicker-to').datepicker('setDate', 'today'); // (-1D:ํ•˜๋ฃจ์ „, -1M:ํ•œ๋‹ฌ์ „, -1Y:์ผ๋…„์ „), (+1D:ํ•˜๋ฃจํ›„, -1M:ํ•œ๋‹ฌํ›„, -1Y:์ผ๋…„ํ›„)  
  });
</script>
<label for="datepicker-from">From</label>
<input id="datepicker-from">
<label for="datepicker-to">to</label>
<input id="datepicker-to">

jQuery API documentation์— options์™€ methods์— ๋Œ€ํ•œ ์„ค๋ช…์ด ์ž์„ธํžˆ ๋‚˜์™€์žˆ์œผ๋‹ˆ ์ฐธ๊ณ ํ•ด์„œ ์•Œ๋งž๊ฒŒ customํ•˜๋ฉด ๋œ๋‹ค! ๐Ÿ˜Š

์ฐธ๊ณ  ์ž๋ฃŒ

profile
Frontend Developer

0๊ฐœ์˜ ๋Œ“๊ธ€