작성
·
2.8K
·
수정됨
0
현재 공식 레퍼런스를 보며 prisma, next를 사용해서 게시판을 만드는 프로젝트 작업을 성공적으로 끝냈지만 한가지 문제가 있었습니다. prisma의 now()가 timezone UTC를 베이스로 작동하고 있는데 이걸 설정하는 방법을 prisma에서 공식적으로 지원하지 않는다고 검색을 통해 알게되었습니다.
아직 강의 내용을 수강하지는 않았기에 강의내용에서 timezone 관련 이슈를 다루는지는 모르겠지만 그 파트를 직접 찾기에는 오래 걸리는터라.... 먼저 질문부터 남겨봅니다.
답변 1
0
안녕하세요 질문 남겨주셔서 감사합니다 :)
제가 질문 이해를 못했는데요. timezone을 어디로 맞출지를 궁금해 하시는 것으로 이해했습니다!
TZ(TimeZone)은 따로 orm 에서 생성하는 것이 아니라 다음과 같이 .env 파일에서 환경변수로
맞추실 수 있습니다. 밑에 코드는 예시입니다.
TZ = 'Asia/Seoul'
TZ = 'Europe/Amsterdam'
... 등등 더 많은 TZ 이 있습니다. '대륙/도시' 형태입니다.
가끔씩은 TimeZone을 상황에 맞게 설정해야할 때도 있습니다.
예를 들면 서울에서 글을 남긴사람이 있고 미국에서 글을 남긴사람이 있는데 서로 위치에 맞게 작성일을 남겨줘야겠죠?
미국에서 글을 썼는데 작성일이 다음날로 되어있다면 이상할 수도 있으니까요. 그땐 default 가 아니라 직접 만들어 주시면 됩니다.
new Date().toLocaleString('ko-KR', {
timeZone: 'Asia/Seoul'
});
new Date().toLocaleString('en-US', {
timeZone: 'Europe/London'
});
.env 파일에서 TZ = 'Asia/Seoul'만 적용하면 timezon이 해당시간으로 설정되나요? schema.prisma에서 환경변수를 사용하기위해 따로 무언가를 더 설정해야하는것이 있을까요??
한번 적용해보았는데 mysql DB에 입력되는값은 그대로네요.
죄송합니다. 제가 질문에 엉뚱하게 답변을 했네요 ㅠㅠ
prisma 스키마에 있는 @default(now())은 질문자님의 말씀처럼 타임존 설정을 지원하지 않습니다..
따로 넣으셔야합니다.
model Post {
id Int @id @default(autoincrement())
author String
title String
contents String @db.LongText
createdAt DateTime @default(dbgenerated("NOW()")) @db.DateTime
updatedAt DateTime @default(dbgenerated("NOW() ON UPDATE NOW()")) @db.DateTime
user User @relation("user:post", fields: [author], references: [username], onDelete: Cascade)
comments Comment[] @relation("post:comment")
}
현재 mysql 기준으로 schema.prisma에서 이러한 방법으로 해결하긴했습니다.
env 파일로 글로벌 타임존을 설정할 수 가 있고 함수로 개별적으로도 설정할 수 도 있었네요. 답변 감사합니다. 검색했을땐 미들웨어로 복잡하게 해야 한다고 하길래 다른방법은 없을까 했는데 시간이되면 prisma orm도 깊게 공부해봐야겠네요!