반응형

SQL Server 2012에는 월의 마지막을 구하는 EOMONTH라는 날짜함수를 제공합니다.

성대중님께서 이야기하신 http://www.sqler.com/474836#comment_475091 부분에 대한 부가설명이라고 보시면 됩니다.

 

만약 이 달의 마지막 날을 구하고자 한다면?

만약 두 달 뒤의 마지막 날을 구하고자 한다면?

 

SQL Server 2012 이전에는 다음과 같이 해야 했습니다.

 

DECLARE @DT1 VARCHAR(10);

DECLARE @DT2 DATETIME;

 

SET @DT1 = '2012-02-20';

SET @DT2 = CONVERT(DATETIME, @DT1);

 

SELECT

       CONVERT(VARCHAR(10),DATEADD(d,-1,DATEADD(m,1,CONVERT(DATETIME,LEFT(@DT1,8) + '01'))),120) AS 'EOMONTH(@DT1)',

       CONVERT(VARCHAR(10),DATEADD(d,-1,DATEADD(m,1,CONVERT(DATETIME,CONVERT(VARCHAR(8),@DT1) + '01'))),120) AS 'EOMONTH(@DT2)',

       CONVERT(VARCHAR(10),DATEADD(d,-1,DATEADD(m,3,CONVERT(DATETIME,LEFT(@DT1,8) + '01'))),120) AS 'EOMONTH(@DT1,2)',

       CONVERT(VARCHAR(10),DATEADD(d,-1,DATEADD(m,3,CONVERT(DATETIME,CONVERT(VARCHAR(8),@DT1) + '01'))),120) AS 'EOMONTH(@DT2,2)'

 그다지 쉽지 않네요.

 

하지만 SQL Server 2012에서는 EOMONTH를 사용해서 다음과 같이 간단하게 처리할 수 있습니다.

 

DECLARE @DT1 VARCHAR(10);

DECLARE @DT2 DATETIME;

 

SET @DT1 = '2012-02-20';

SET @DT2 = CONVERT(DATETIME, @DT1);

 

SELECT

        EOMONTH(@DT1) AS 'EOMONTH(@DT1)',

        EOMONTH(@DT2) AS 'EOMONTH(@DT2)',

        EOMONTH(@DT1,2) AS 'EOMONTH(@DT1,2)',

        EOMONTH(@DT2,2) AS 'EOMONTH(@DT2,2)'

참 쉽죠잉?

상세내역은 다음 URL을 참고하세요.

http://msdn.microsoft.com/ko-kr/library/hh213020(v=sql.110).aspx

참고로 이것은 RC0 기준입니다.

 

출처: https://windtrap.tistory.com/82 [곰탱이의 개인블로그]

 

추가 EOMONTH 를 이용해 월초를 구해봅시다.

DECLARE @DT1 VARCHAR(10);

DECLARE @DT2 DATETIME;

 

SET @DT1 = '2012-02-20';

SET @DT2 = CONVERT(DATETIME, @DT1);

 

SELECT

		DATEADD(dd,1,EOMONTH(@DT1)) AS 'EOMONTH(@DT1)',
        
		DATEADD(dd,1,EOMONTH(@DT2)) AS 'EOMONTH(@DT2)',
        
        DATEADD(dd,1,EOMONTH(@DT1,2)) AS 'EOMONTH(@DT1,2)',
        
        DATEADD(dd,1,EOMONTH(@DT2,2)) AS 'EOMONTH(@DT2,2)'

 

반응형
반응형

보통 다음 페이지로 이동할 때 location.href  URL 을 넣어서 이동을 시키게 됩니다. 그럼 뒤로 가기가 가능해 집니다. 브라우저에 뒤로 가기 버튼이 활성화 되죠. 이렇게 뒤로 가기가 되지 않도록 페이지 이동을 시킬 수가 있습니다.

 

 어떤 웹 사이트에서는 보안상의 이유로 뒤로 가기가 안되도록 구현하는 곳이 있습니다. 먼저 뒤로 가기가 되는 일반적인 경우를 보겠습니다. 페이지 이동을 위해 버튼을 클릭했을 때 move 함수를 실행하도록 만들었습니다. 페이지 이동은 location.href 를 변수를 사용합니다.

 

<!DOCTYPE HTML> 
<html> 
	<head> 
		<meta content="text/html; charset=euc-kr"> 
		<title>페이지 이동 </title> 
	</head> 
	<script type="text/javascript"> 
		function move(){ 
        	location.href="history02.html"; 
        } 
	</script> 
	<body> 첫 번째 페이지 입니다.<br/><br/> 
		<input type="button" value="다음>" onClick="javascript:move();"> 
	</body> 
</html>

 위의 소스를 실행했을 때 이동한 history02.html 페이지에서 웹 브라우저 뒤로 가기 버튼이 활성화 되어 있는 것을 알 수 있습니다. 그러니까 이동이 가능하다는 것이죠.

 

 브라우저에 뒤로 가기 버튼을 비활성화 시키려면 이전 이력이 남지 않는 replace 함수를 사용해야 합니다. location 객체의 replace() 함수 파라미터로 이동할 주소를 넣으시면 됩니다.

 

<!DOCTYPE HTML> 
<html> 
<head> 
	<meta content="text/html; charset=euc-kr"> 
	<title>페이지 이동 </title> 
</head>
	<script type="text/javascript"> 
	function move(){
		location.replace("history02.html");
	} 
	</script> 
<body> 첫 번째 페이지 입니다.<br/><br/> 
	<input type="button" value="다음>" 
	onClick="javascript:move();"> 
</body> 
</html>

 

 아래 그림처럼 location.replace() 함수를 이용해서 다음 페이지로 이동시키면 상단에 있는 브라우저 이전 버튼은 활성화가 되어 있지 않습니다 



출처: https://mainia.tistory.com/2806 [녹두장군 - 상상을 현실로]

반응형
반응형

웹 페이지 개발 중 특정 HTML 요소에 onClick 이벤트를 발생 시 이미지 변경 또는 특정 효과를 주기 위해 class 를 추가 제거 하는 상황들이 많이 발생하게 됩니다.

 

물론 큰 사이트 개발이나 유지 보수를 하는 경우라면 개발자 입장에서는 위와 같은 경우를 컨트롤 할 필요가 거의 없습니다. UI / UX 개발 담당자들 또는 퍼블리셔들이 이미 해당 HTML 요소(Check box, Radio box 등등)의 click 이벤트에 대해 처리를 해두었기 때문입니다. 

 

하지만 소규모 프로젝트에서 일반적으로 퍼블을 전달 받았을때 스크립트 적용은 되어 있지 않은 경우가 거의 대부분입니다. 

 

그렇다면 HTML 요소의 class 변경을 어떻게 해야 할까요? 

<input id="chkBox" type="checkbox" class="on"
onclick="javascript:chkBoxImageChange();" checked/>

위 코드는 간단한 체크 박스를 표기 합니다. 

 

기본 checked / unchecked 이미지를 사용 하지 않습니다.  

class 명이 on 일경우 check 된 스타일의 이미지를 입히고, 

class 명이 빈값일 경우 unchecked 된 스타일의 이미지를 입힌다고 가정 하겠습니다. 

 

chkBoxImageChange() 함수는 아래와 같이 작성하면 됩니다. 

<script type="text/javascript">

window.chkBoxImageChange = function() {
if(document.getElementById('chkBox').getAttribute('class') == 'on')
{
document.getElementById('chkBox').setAttribute('class', '');
} else {
document.getElementById('chkBox').setAttribute('class', 'on');
};
};

</script>

 

class 명이 on 이면 id 값이 chkBox 인 요소의 속성 값 중 class 를 빈값으로 바꾸고 

class 명이 빈값이면 id 값이 chkBox 인 요소의 속성 값 중 class 를 on 으로 바꾸는 코드 입니다. 

 

 

위와 같이 작성 할 수 있지만 HTML5 에서는 위와 같은 수고스러움을 모두 덜어 주고 있습니다. 

<script type="text/javascript">

window.fncShowHideList = function() {
document.getElementById('chkBox').classList.toggle('on');
};

</script>

HTML5에서는 classList 라는 속성을 제공하고 있는데요. 이녀석은 class 값을 더욱 쉽게 가지고 놀수 있도록 도와 주고 있습니다. 

 

classList.toggle('class명') 이라고 작성 했을 경우 class명이 존재 하면 삭제를 하고 존재하지 않을 경우 추가를 하는 동작을 합니다. 

 

jQuery 의 toggle 과 동일한 동작을 하는 거죠. 다만 jQeury 는 사용하기 위해 Library 를 추가 해야 하지만 HTML5 는 그럴 필요가 없다는 겁니다. 

 

 

Element.classList 사용 예를 추가로 보여드리겠습니다. 

div.classList.remove("foo");
div.classList.add("newclass");

<div> 태그 class 명에 foo 값이 있으면 제거하고 newclass 라는 class 명을 추가 합니다. 

 

div.classList.toggle("visible");

첫 샘플에서는 getElementById('id') 로 해당 ID값에 대해 class 추가 / 삭제 여부를 결정 했다면 이번에는 <div> 태그 전체에서 class 명 중 visible 있으면 삭제하고 없으면 추가 하는 명령입니다. 

 

div.classList.toggle("visible", i < 10 );

for loop 이나 while loop 을 돌리고 있을 경우 i 값으로 카운트 한다고 가정했을때 i 값이 10보자 작을 경우에만 class 명이 visible 이 있으면 삭제하고 없으면 추가 하는 명령입니다. i 값이 10보다 커지면 아무 동작 하지 않습니다. 

 

alert(div.classList.contains("foo"));

contains 라는 함수가 보이는 데요. 이는 foo 라는 class 명이 있으면 true 를 리턴하고 없으면 false 를 리턴합니다. 

 

div.classList.add("foo", "bar");
div.classList.remove("foo", "bar");

class 명을 , 로 구분하여 한번에 여러 class 명을 추가 / 삭제 하는 명령입니다. 

 

 

IE 10 에서는 동작하지 않는 다는 글이 있습니다. (제가 테스트 해보지는 못했습니다. 테스트 후 확인 되면 명확하게 내용 추가 하도록 하겠습니다. )

그래서 PC 환경에서는 적용하기 약간은 부담이 될 수도 있지만 모바일 환경이라면 마음 놓고 사용하셔도 문제 없을 것 같습니다. 



출처: https://jamesdreaming.tistory.com/21 [Dev Life in IT]

반응형
반응형

304 는 에러가 아닙니다. 정확하게 'HTTP status code' (상태코드) 라고 해야합니다.

http://www.faqs.org/rfcs/rfc2616.html RFC 2616 에 잘 언급되어 있습니다.

 

http://linuxchannel.net/docs/Apache_Quick_Reference_Card.html 이 문서의 끝부분 즈음에 304를 'Not modified'라고 설명되어 있는데, 말그대로 '변경사항이 없음'을 말합니다.

(시간 비교) 이것을 이해하기 위해서는 클라이언트와 서버간의 의사소통 을 약간이라도 이해하고 있어야 합니다.

즉, 클라이언트(대부분 '웹브라우저'라고도 함)가 웹서버에게 어떤 파일을 요청할때, 자신의 HDD 공간에 있는(cached) 파일의 정보, 그러니깐 마지막으로 변경된 시간이나 파일크기 등등의 정보를 포함해서 서버에게 요청합니다.

 

(요청헤더에 붙음) 서버는 클라이언트가 보낸 요청헤더 정보를 보고, 자신의 웹서버에 있는 파일 정보와 비교합니다.

이때 파일 변경시간과 크기등이 서로 같으면 서버는 304 로 응답합니다.

즉 이것은 클라이언트에 있는 파일과 서버에 있는 파일이 서로 같으므로 클라이언트 HDD 에 있는 파일을 사용하라 라는 의미이고 실제로 파일 전송은 이루어지질 않습니다.

 

반대로 파일 변경시간이 서로 틀리거나 파일크기등등이 서로 맞질않으면 이때는 200 응답을 내고 서버는 요청한 파일을 클라이언트에게 전달합니다.

클라이언트는 200 응답코드를 받았으므로 기존의 파일이 있다면 삭제하고 새로운 파일로 대체 또는 캐시하게 됩니다. 대부분 동적인 파일(PHP)은 항상 200 응답을 냅니다.

반면 정적인 HTML 이나 gif, jpg, png, mp3, mpg, asf 등등은 거의 대부분 304로 응답합니다.

 

출처 : http://www.linuxchannel.net/board/read.php?table=qna&no=3948

반응형

'Server' 카테고리의 다른 글

[Apache] XAMPP Apache port error  (0) 2020.07.24

+ Recent posts