Date.toISOString() ๋กœ ์ธํ•œ -9์‹œ๊ฐ„ ๋˜๋Œ๋ฆฌ๊ธฐ (@date-fns)

2024. 8. 29. 22:58ยทissue

์บ˜๋ฆฐ๋”๋ฅผ ์ถ”๊ฐ€ํ•˜๊ธฐ ์ „, ํˆฌ๋‘๋ฆฌ์ŠคํŠธ๋งŒ ์žˆ์—ˆ์„ ๋•Œ๋Š” ์ €์žฅํ•œ ๋‚ ์งœ(created_at)๋ฅผ ๊ธฐ์ค€์œผ๋กœ ํƒœ์Šคํฌ๋ฅผ ๋ณด์—ฌ์ฃผ๊ณ  ์žˆ์—ˆ๋Š”๋ฐ, ์บ˜๋ฆฐ๋”๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด์„œ ์ €์žฅ ๋‚ ์งœ ๋”ฐ๋กœ, ํƒœ์Šคํฌ ๊ธฐ์ค€์ผ ๋”ฐ๋กœ ๋‚˜๋ˆ„๊ฒŒ ๋˜์–ด์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด due_date ์ปฌ๋Ÿผ์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.

ALTER TABLE tasks
ADD COLUMN due_date DATE;

 

์ดํ›„ createTaskํ•˜๋Š” ํ•จ์ˆ˜์— props๋กœ due_date๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ , ์ด์™ธ์˜ ํ•„์š”ํ•œ ๋ถ€๋ถ„์— ์ž‘์„ฑํ•ด์„œ Calendar ํŽ˜์ด์ง€์—์„œ ๋ชจ๋‹ฌ๋กœ ํƒœ์Šคํฌ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋„๋ก ์ˆ˜์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ DB๋ฅผ ํ™•์ธํ•˜๋‹ˆ due_date๊ฐ€ -1์ผ ๋˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ timestamptz๋กœ ํƒ€์ž…์„ ๋ฐ”๊พธ๊ณ  ์‹œ๋ถ„์ดˆ๊นŒ์ง€ ๋ณด๋‹ˆ๊นŒ -9์‹œ๊ฐ„์ด ๋˜์–ด์žˆ๋Š” ๊ฒƒ์„ ๋ณด๋‹ˆ UTC ๊ธฐ์ค€์œผ๋กœ ๋‚ ์งœ๊ฐ€ ์ €์žฅ๋œ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

 

๋‹ค์Œ ์‚ฌ์ง„์„ ๋ณด๋ฉด 08/12์ž ํƒœ์Šคํฌ์— due_date๋กœ 08/11 15์‹œ๋กœ ๋˜์–ด ์žˆ๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

์ฐพ์•„๋ณด๋‹ˆ JavaScript์˜ toISOString ํ•จ์ˆ˜๊ฐ€ UTC๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋ฐ˜ํ™˜ํ•˜๊ธฐ ๋•Œ๋ฌธ์— KST์™€ ๋น„๊ตํ•˜๋ฉด ์ƒ๊ธด 9์‹œ๊ฐ„์˜ ์‹œ์ฐจ๋กœ ์ธํ•œ ๋ฌธ์ œ์˜€์Šต๋‹ˆ๋‹ค.

๋‹ค๋ฅธ ๋ถ„๋“ค์˜ ์ฝ”๋“œ๋ฅผ ๋ณด๋‹ˆ ํ˜„์žฌ ์‹œ๊ฐ„์„ ๊ธฐ์ค€์œผ๋กœ ์ฐจ์ด๋ฅผ ๊ณ„์‚ฐํ•ด์„œ ๊ทธ๋งŒํผ์„ ํ˜„์žฌ ์‹œ๊ฐ„์—์„œ ๋นผ์„œ ์‹œ๊ฐ„์„ ์„ค์ •ํ•˜๋Š” ๋ฐฉ์‹์ด ๋งŽ์ด ๋ณด์˜€๋Š”๋ฐ, ์ €๋Š” props๋กœ ๋ฐ›์€ due_date๋ฅผ ๋ณ€ํ™˜ํ•ด์„œ KST๋กœ ์ €์žฅํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ createTask ํ•จ์ˆ˜๋ฅผ ์ˆ˜์ •ํ•ด์„œ ์ผ์ž๊ฐ€ ๋ฐ€๋ฆฌ๋Š” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค.

 

import { addHours } from 'date-fns'
...
createTask: async (title, detail, userId, dueDate) => {
    const kstDueDate = addHours(new Date(dueDate), 9)
    const supabase = createClient()
    const { data, error } = await supabase
      .from('todolist')
      .insert([{ todo_title: title, todo_detail: detail, user_id: userId, due_date: kstDueDate.toISOString() }])
      .select()

    if (error) {
      console.error('Error adding task: ' + error.message)
    } else {
      set(state => ({ tasks: [...state.tasks, ...data] }))
    }
  },
  ...

 

 

๊ทธ๋Ÿฐ๋ฐ ์œ„์—์„œ due_date์˜ ํƒ€์ž…์„ date → timestamptz๋กœ ๋ฐ”๊ฟจ์—ˆ๋Š”๋ฐ, Today ํŽ˜์ด์ง€์—์„œ ํƒœ์Šคํฌ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ์ƒˆ๋กœ๊ณ ์นจํ•˜๋ฉด ์ž‘์„ฑํ•œ ๋‚ด์šฉ์ด ๋‚ ์•„๊ฐ€๋Š” ํ˜„์ƒ์„ ๋ชฉ๊ฒฉํ–ˆ์Šต๋‹ˆ๋‹ค.

 

...
    const startDayTime = new Date(selectedDate)
    startDayTime.setHours(0, 0, 0, 0)

    const endDayTime = new Date(selectedDate)
    endDayTime.setHours(23, 59, 59, 999)

    const supabase = createClient()
    const { data, error } = await supabase
      .from('todolist')
      .select('*')
      .gte('due_date', startDayTime.toISOString())
      .lte('due_date', endDayTime.toISOString())
...

 

Supabase์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ฌ ๋•Œ ์œ„์™€ ๊ฐ™์€ ๊ธฐ์ค€์œผ๋กœ ๊ฐ€์ ธ์™”๊ธฐ ๋•Œ๋ฌธ์— ๊ธฐ์กด์˜ ์˜ˆ์ƒํ•œ ํƒ€์ž„๋ผ์ธ์— ๋ฌธ์ œ๊ฐ€ ์ƒ๊ฒผ๋‹ค๊ณ  ํŒ๋‹จํ•˜๊ณ  ๋‹ค์‹œ date ํƒ€์ž…์œผ๋กœ ๋ณ€๊ฒฝํ•ด์ฃผ๋‹ˆ ๋‹ค์‹œ ์ •์ƒ์ ์œผ๋กœ ํƒœ์Šคํฌ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

 

 

'issue' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

ํšŒ์›๊ฐ€์ž…์‹œ ์ด๋ฉ”์ผ ์ธ์ฆ ๋ณด์•ˆ ์ด์Šˆ (api endpoint ๊ด€๋ จ)  (2) 2024.10.16
Git Error: RPC failed; HTTP 400 curl 22 The requested URL returned error: 400  (1) 2024.10.02
๋นŒ๋“œ ์ค‘ Module not found Error (Git)  (0) 2024.07.26
์†Œ์…œ ๋กœ๊ทธ์ธ ๊ด€๋ จ ์—๋Ÿฌ (OAuth flow error)  (0) 2024.07.26
์ธ์ฆ ์ƒํƒœ์— ๋”ฐ๋ฅธ ํŽ˜์ด์ง€ ์ ‘๊ทผ ์ œํ•œ (Next.js, supabase)  (0) 2024.07.26
'issue' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • ํšŒ์›๊ฐ€์ž…์‹œ ์ด๋ฉ”์ผ ์ธ์ฆ ๋ณด์•ˆ ์ด์Šˆ (api endpoint ๊ด€๋ จ)
  • Git Error: RPC failed; HTTP 400 curl 22 The requested URL returned error: 400
  • ๋นŒ๋“œ ์ค‘ Module not found Error (Git)
  • ์†Œ์…œ ๋กœ๊ทธ์ธ ๊ด€๋ จ ์—๋Ÿฌ (OAuth flow error)
nuew
nuew
๐Ÿคธ ์žฌ์ฃผ ๋„˜๋Š” ์ค‘
  • nuew
    bloggg. . .๐Ÿฆ–๐Ÿ’ฅ
    nuew
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (88)
      • issue (10)
      • baekjoon (41)
      • lecture recap (11)
      • What I Learn (26)
      • retrospective (0)
      • maeil-mail (0)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ํ™ˆ
    • ํƒœ๊ทธ
    • ๋ฐฉ๋ช…๋ก
  • ๋งํฌ

  • ๊ณต์ง€์‚ฌํ•ญ

  • ์ธ๊ธฐ ๊ธ€

  • ํƒœ๊ทธ

    Algorithm
    Node.js
    TypeScript
    modal
    ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ
    ์•Œ๊ณ ๋ฆฌ์ฆ˜
    ๋ฐฑ์ค€
    JavaScript
    Study
    zustand
    ํ•œ์ž…ํฌ๊ธฐ๋กœ์ž˜๋ผ๋จน๋Š”ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ
    js
    media-query
    what i learn
    css
    ํ•œ์ž…ํฌ๊ธฐ๋กœ ์ž˜๋ผ๋จน๋Š” ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ
    ์ฝ”๋”ฉํ…Œ์ŠคํŠธ
    TailwindCSS
    issue
    Baekjoon
  • ์ตœ๊ทผ ๋Œ“๊ธ€

  • ์ตœ๊ทผ ๊ธ€

  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.3
nuew
Date.toISOString() ๋กœ ์ธํ•œ -9์‹œ๊ฐ„ ๋˜๋Œ๋ฆฌ๊ธฐ (@date-fns)
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”