입력값 형식은 yyyymmdd, yyyy-mm-dd, yyyy/mm/dd 3가지 사용을 할 수 있습니다.
function isDate(yyyymmdd) {
// input
// yyyymmdd, yyyy-mm-dd, yyyy/mm/dd
// output
// 0: 정상, 1: 해당월의 날짜 넘음, 2: 존재하지 않는 달, 3: 포맷 안맞음, 4: -인 날짜
var y, m, d;
if (yyyymmdd.length == 8) {
if (!yyyymmdd.match(/[0-9]{8}/g))
return 3;
y = yyyymmdd.substring(0, 4);
m = yyyymmdd.substring(4, 6);
d = yyyymmdd.substring(6, 8);
} else if (yyyymmdd.length == 10) {
if (!yyyymmdd.match(/[0-9]{4}[-/][0-9]{2}[-/][0-9]{2}/g))
return 3;
y = yyyymmdd.split('-')[0];
m = yyyymmdd.split('-')[1];
d = yyyymmdd.split('-')[2];
} else {
return 3;
}
var limit_day;
switch (eval(m)) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
limit_day = 31;
break;
case 2:
if ((y - 2008) % 4 == 0)
limit_day = 29;
else
limit_day = 28;
break;
case 4:
case 6:
case 9:
case 11:
limit_day = 30;
break;
default:
return 2;
break;
}
if (eval(d) > limit_day) {
return 1;
}
if (eval(d) < 1) {
return 4;
}
return 0;
}
getDate함수
년도, 월, 일, 포맷값을 입력값으로 넣으면 원하는 날짜를 Date 형태로 가져옵니다.
function getDate(yyyy, mm, dd, format) {
var today = new Date();
var year = today.getFullYear();
var month = today.getMonth();
var day = today.getDate();
var resultdate = new Date(yyyy+year, month+mm, day+dd);
year = resultdate.getFullYear();
month = resultdate.getMonth();
day = resultdate.getDate();
month++;
if(month < 10){
month = "0" + month;
}
if(day < 10){
day = "0" + day;
}
if(format == undefined){
return year + "" + month + "" + day;
}else{
return year + format + month + format + day;
}
}
dateCalc 함수
이 함수는 소스를 보시고 필요에 맞게 고쳐서 사용하시면 됩니다.
startObj : 시작날짜 입력 필드
endObj : 종료날짜 입력 필드
function dateCalc(startObj, endObj) {
var startDt = startObj.val();
startDt = startDt.replace(/-/gi,"");
startDtyear = startDt.substring(0,4);
startDtmm = startDt.substring(4,6);
startDtdd = startDt.substring(6,8);
startObj.val(startDtyear + startDtmm + startDtdd);
/**
* 1년후를 계산한 로직으로 필요한 로직으로 수정하여 사용하면 됩니다.
*/
endObj.val(startDtyear-0+1 + startDtmm + startDtdd);
var fulldate = startDtyear + startDtmm + startDtdd -0;
var curDate = getDate(0,0,0); //현재날짜 month는 0~11
var curYear = curDate.substring(0,4);
var curMonth = curDate.substring(4,6);
var curday = curDate.substring(6,8);
/**
* 여기서부터 처리를 원하는 로직을 넣으면 됩니다.
*/
}
Ifmagic_quotes_sybaseis on, no backslashes are stripped off but two apostrophes are replaced by one instead.
An example use ofstripslashes()is when the PHP directivemagic_quotes_gpcison(it was on by default before PHP 5.4), and you aren't inserting this data into a place (such as a database) that requires escaping. For example, if you're simply outputting data straight from an HTML form.
저장할 때는 쉽게 하는데, 막상 검색을 해서 가져오려고 하면 헤매는 경우가 종종 있습니다. 문자 타입이 아니다 보니, 칼럼을 문자로 변형하여 가져오곤 하는데요. 이 경우 전체 테이블의 칼럼을 문자로 변환을 하고 데이터를 가져오기 때문에 해당 칼럼에 인덱스가 있다고 하더라고 Full Scan을 하여 조회 속도가 느려지게 됩니다. 처음 데이터가 많지 않을 때는 속도를 체감하지 못하지만 데이터가 누적이 되면서 점점 느려지는 속도를 확인하시게 됩니다.
잘못된 데이터 조회 방법 예시
SELECT *
FROM {$TABLE}
WHERE DATE({$COLUMN}) BETWEEN '2019-10-01' AND '2019-10-15'
위의 * 표시는 예시입니다. 실제 사이트 운영 시에는 * 아닌 각 칼럼들을 나열해 주시는 게 좋습니다.
그럼 어떻게 조회를 하는 것이 좋을까요? 해당 칼럼에 데이터를 시:분:초까지 넣어서 날짜 유형으로 변형을 하고 조회를 하시면 됩니다.
1. 자동 형변환을 이용하여 조회하기
1) MySQL은 '2019-10-01'같이 String으로 입력을 해도 자동으로 날짜 타입으로 변환하여 조회를 합니다. 2) 날짜 타입으로 자동 변환이 될 때는 YYYY-MM-DD 00:00:00 으로 됩니다. 그래서 뒤의 날짜는 원하는 날짜 +1일을 하셔야 합니다.
SELECT * FROM {$TABLE}
WHERE {$COLUMN} BETWEEN '2019-10-01' AND '2019-10-15'
2. MySQL 문법에 맞게 조회하기
1) 원하는 날짜에 시:분:초를 추가하여 입력하여 주세요. 2) 뒤의 날의 날짜는 23:59:59로 추가하여 주셔야 다 조회가 됩니다.
SELECT * FROM {$TABLE}
WHERE {$COLUMN} BETWEEN STR_TO_DATE('2019-10-01 00:00:00','%Y-%m-%d %H:%i:%s')
AND STR_TO_DATE('2019-10-14 23:59:59','%Y-%m-%d %H:%i:%s')
위의 예제들은 특정 기간을 조회하는 SQL입니다.
하지만, 최근 일주일과 같이 현재 날짜를 기준으로 데이터를 조회하는 경우가 있습니다. 이 경우는 위이 SQL에서 날짜를 계산하여 조회를 하셔도 되지만 MySQL함수를 이용하여 좀 더 쉬게 조회를 할 수 있습니다.
1. 최근 일주일 데이터 조회
SELECT * FROM {$TABLE}
WHERE {$COLUMN} > DATE_SUB(NOW(), INTERVAR 7 DAY)
2. 최근 1개월 데이터 조회
SELECT * FROM {$TABLE}
WHERE {$COLUMN} > DATE_SUB(NOW(), INTERVAR 1 MONTH)
3. 최근 1년 데이터 조회
SELECT * FROM {$TABLE}
WHERE {$COLUMN} > DATE_SUB(NOW(), INTERVAR 1 YEAR)