가 Sequelize이 createdAt/updatedAt는 사용자 정의 Sequelize.DATE 필드 유형에 대한 및 타임 스탬프에 대한 기본 시간 형식 모두로 UNIX 타임 스탬프를 사용하여 강제로 방법이 있나요 DATE 필드에 대한 UNIX 타임 스탬프를 사용합니까?Sequelize -
감사합니다.
P. 나는 MySQL을 사용하고있다.
가 Sequelize이 createdAt/updatedAt는 사용자 정의 Sequelize.DATE 필드 유형에 대한 및 타임 스탬프에 대한 기본 시간 형식 모두로 UNIX 타임 스탬프를 사용하여 강제로 방법이 있나요 DATE 필드에 대한 UNIX 타임 스탬프를 사용합니까?Sequelize -
감사합니다.
P. 나는 MySQL을 사용하고있다.
주어진 시간에 두 가지 가능한 날짜가 있습니다 (국제 날짜 행에 상대적인 위치에 따라 다름). 즉, UNIX 시간 소인을 날짜로 변환하면 시간대를 고려해야합니다.
예를 들어, UNIX 타임 스탬프 946684800
은 2000-01-01 00:00:00Z
입니다. 이것이 대서양의 동쪽에있는 거의 모든 곳의 새로운 밀레니엄의 첫날을 대표하는 반면, 그 바다의 서쪽에있는 모든 곳은 여전히 밀레니엄 이브입니다. 어떤 날짜로 표현 되나요? 이 타임 스탬프로 날짜 변환 할 수있어 동안
, 하나는 (예 : UTC 자정으로 지정된 날짜를 나타냅니다) 그렇게에 대한 자신의 규칙을 정의해야합니다 그렇지 않으면 동일한 날짜는 각 인코딩에 따라 다르게 표현 될 수있다 . 일반적으로 말해서 이것은 의도하지 않은 모든 종류의 결과를 초래할 수있는 나쁜 생각입니다.
DATE
데이터 형식이 존재하는 이유는 올바른 날짜 저장 방법입니다. 그걸 써.
아니요, 적어도 아직은 없네. CreatedAt는 sequelize에서 utils.now 함수를 사용하여 설정됩니다. 이 함수는 추가 인수없이 javascript Date 함수를 사용합니다. Squelize는 Date를 호출하는 방식을 변경하기 위해 수정할 수 있지만 현재 버전에서는이를 수행 할 코드가 없습니다. 참조 here
그러나 createdAt 및 다른 타임 스탬프를 사용하지 않도록 설정하고 원시 쿼리를 사용하여 자신을 설정할 수 있습니다. 그러나 후속 기능을 희생합니다. 최상의 해결 방법은 비즈니스 로직에서 해당 필드를 유닉스 시간으로 변환 한 후 사용하는 것입니다.
고마워, 나는 그런 solis에 대해 생각했다. 하지만 그럼에도 불구하고«당신은 후유증의 기능을 희생합니다.»? 날짜 지정 쿼리를 수행 할 수 없다는 뜻입니까? – f1nn
sequelize 개체를 테이블에 매핑합니다. 이 매핑은 데이터베이스에 대한 객체 지향 인터페이스를 제공합니다. 이러한 값을 설정하지 않으면 sequelize는 오브젝트가 갱신되었는지 점검 할 수 없습니다. 당신은 그 논리를 재 작성해야 할 것입니다. –
eggyal
의 대답은 MySQL에서 적절한 방법이지만, 우리 중 일부는 datetime/timestamp 대신 unix timestamp를 사용해야하는 환경이나 팀에서 일하고있을 수도 있습니다.
이 작업을 수행하는 가장 좋은 방법은 후편 내부에서 후크를 사용하는 것입니다. 당신의 각 모델의 하단에이 코드를 추가 할 수 있습니다 :
{
tableName: 'Addresses',
hooks : {
beforeCreate : (record, options) => {
record.dataValues.createdAt = Math.floor(Date.now()/1000);
record.dataValues.updatedAt = Math.floor(Date.now()/1000);
},
beforeUpdate : (record, options) => {
record.dataValues.updatedAt = Math.floor(Date.now()/1000);
}
}
}
이것은 유닉스 타임 스탬프로 createdAt
및 updatedAt
필드를 삽입합니다.
@Downvoter : 댓글을 달았습니까? – eggyal
유닉스 시간을 저장하는 것은 시간을 저장하는 유효한 방법입니다 (일반적으로 말하면) - 로컬 날짜/시간을 해석하는 것은 UTC 시간에서 로컬/계절 오프셋을 계산하는 것입니다. – rjarmstrong
@rjarmstrong : 정확히 내 대답은 뭐라고하지 않습니까?요점은 OP가 타임 스탬프를 사용하여 날짜 (및 날짜 만)를 저장하는 방법을 묻고 있다는 것이 었습니다. – eggyal