회원 가입시 생년월일 달력이 1970년 이전으로 가니 오류가 발생하네요 정보
회원 가입시 생년월일 달력이 1970년 이전으로 가니 오류가 발생하네요본문
회원 가입시 생년월일 달력이 1970년 이전으로 가니 오류가 발생하네요.
서버는 윈도우XP Pro에 APM으로 돌립니다.
혹시 원인이나 해결 방법을 아시면 도움 부탁드립니다.
오류 내용을 보니 윈도우에서 mktime() 함수와 date() 함수를 지원하지 않는다는데..
php를 전혀 몰라서 어떻게 해야 할 지 모르겠네요...^^
<오류 내용>
Warning: mktime(): Windows does not support negative values for this function in c:\apm\htdocs\gnu4\bbs\calendar.php on line 67
Warning: date(): Windows does not support dates prior to midnight (00:00:00), January 1, 1970 in c:\apm\htdocs\gnu4\bbs\calendar.php on line 68
서버는 윈도우XP Pro에 APM으로 돌립니다.
혹시 원인이나 해결 방법을 아시면 도움 부탁드립니다.
오류 내용을 보니 윈도우에서 mktime() 함수와 date() 함수를 지원하지 않는다는데..
php를 전혀 몰라서 어떻게 해야 할 지 모르겠네요...^^
<오류 내용>
Warning: mktime(): Windows does not support negative values for this function in c:\apm\htdocs\gnu4\bbs\calendar.php on line 67
Warning: date(): Windows does not support dates prior to midnight (00:00:00), January 1, 1970 in c:\apm\htdocs\gnu4\bbs\calendar.php on line 68
댓글 전체
전형적인 timestamp의 유효 범위는 1901년 12월 13일 금요일 20:45:54 GMT부터 2038년 1월 19일 화요일 03:14:07 GMT입니다. 이것은 부호 있는 32비트 정수형의 최소와 최대값에 대응합니다. 윈도우즈에서는 이 값은 1970-01-01부터 2038-01-19로 제한됩니다
// 생일입력 받을 수 있는 함수...1970년 이전것도 가능...
function mk_time($m,$d,$y){
if($y<1970){
$mk_time=mktime(9,0,0,1,1,1970);
$i=1969;
if(checkdate($m,$d,$y)){
do{
for($j=12;$j>=1;$j--){
if($m==$j && $y==$i){
for($k=31;$k>=$d;$k--){
if(checkdate($j,$k,$i)) {
$time++;
}
else
{
//
}
} //for k
break;
}
else
{
for($z=31;$z>=1;$z--){
if(checkdate($j,$z,$i)) {
$time++;
}
else
{
//
} //if
} //for z
}
} //for j
$i--;
}while($i>=$y);
return $mk_time-(($time)*24*3600);//24*3600=1day
}
else
{
return $mk_time;
}
}//if 1970
else
{
return mktime(0,0,0,$m,$d,$y);
}
}
위 코드를 calendar.php 또는 lin.php 등에 넣으시고
다음 코드를 찾아서...68라인쯤되나요? 흐흐
// 해당월의 1일
$mktime = mktime(0,0,0, $mm,1,$yyyy);
요거를
$mktime = mk_time($mm,1,$yyyy); <--mktime() 함수대신 사용자가 만든 mk_time함수로 대체하는거지요
수정합니다.
근데 결정적으로 아래 문장이 걸리네요. date 와 strtotime 함수등도 마찬가지로 1970년에 영향을 받거든요.
그래서 요리조리 고민하다가 걍 제가 주고싶은 값을 주었어요. 어차피 $dt값을 사용하는 부분이 없길래....
어떤 알수없는 문제가 발생할지 모르지만 일단 제대로 실행은 됩니다.
여하튼 아래문장을
$dt = getdate(strtotime(date("Y-m-1", $mktime)));
요렇게 수정합니다.
$dt = '1';
한번해보세요. 회원가입시 생일선택만되면 DB에는 datetime형이 아닌 vaCHAR형에 저장하기 때문에
1970과는 관계가 없습니다.
사실 저도 잘 모르지만 답이 없어서 제가 아는선에서 해결해 보았습니다.
function mk_time($m,$d,$y){
if($y<1970){
$mk_time=mktime(9,0,0,1,1,1970);
$i=1969;
if(checkdate($m,$d,$y)){
do{
for($j=12;$j>=1;$j--){
if($m==$j && $y==$i){
for($k=31;$k>=$d;$k--){
if(checkdate($j,$k,$i)) {
$time++;
}
else
{
//
}
} //for k
break;
}
else
{
for($z=31;$z>=1;$z--){
if(checkdate($j,$z,$i)) {
$time++;
}
else
{
//
} //if
} //for z
}
} //for j
$i--;
}while($i>=$y);
return $mk_time-(($time)*24*3600);//24*3600=1day
}
else
{
return $mk_time;
}
}//if 1970
else
{
return mktime(0,0,0,$m,$d,$y);
}
}
위 코드를 calendar.php 또는 lin.php 등에 넣으시고
다음 코드를 찾아서...68라인쯤되나요? 흐흐
// 해당월의 1일
$mktime = mktime(0,0,0, $mm,1,$yyyy);
요거를
$mktime = mk_time($mm,1,$yyyy); <--mktime() 함수대신 사용자가 만든 mk_time함수로 대체하는거지요
수정합니다.
근데 결정적으로 아래 문장이 걸리네요. date 와 strtotime 함수등도 마찬가지로 1970년에 영향을 받거든요.
그래서 요리조리 고민하다가 걍 제가 주고싶은 값을 주었어요. 어차피 $dt값을 사용하는 부분이 없길래....
어떤 알수없는 문제가 발생할지 모르지만 일단 제대로 실행은 됩니다.
여하튼 아래문장을
$dt = getdate(strtotime(date("Y-m-1", $mktime)));
요렇게 수정합니다.
$dt = '1';
한번해보세요. 회원가입시 생일선택만되면 DB에는 datetime형이 아닌 vaCHAR형에 저장하기 때문에
1970과는 관계가 없습니다.
사실 저도 잘 모르지만 답이 없어서 제가 아는선에서 해결해 보았습니다.
해결사님 정말 감사합니다.^^
아이디처럼 제 문제를 해결해 주셨네요..
혹시 비용 청구를 하시는 건 아니겠죠...ㅎ^^ㅎ
많은 도움 얻고 갑니다.....
아이디처럼 제 문제를 해결해 주셨네요..
혹시 비용 청구를 하시는 건 아니겠죠...ㅎ^^ㅎ
많은 도움 얻고 갑니다.....

감사합니다.
근데 다른 분들은 오류가 안나나요?
저도 윈도우인데...^^
근데 다른 분들은 오류가 안나나요?
저도 윈도우인데...^^

2038년 부터는 이런 에러가 나네요
Warning: mktime(): Windows does not support negative values for this function in C:\Inetpub\wwwroot\watchdog\bbs\calendar.php on line 74
Warning: mktime(): Windows does not support negative values for this function in C:\Inetpub\wwwroot\watchdog\bbs\calendar.php on line 74

74라인은
else
{
return mktime(0,0,0,$m,$d,$y);
}
입니다.
else
{
return mktime(0,0,0,$m,$d,$y);
}
입니다.
2038년 이상 선택에 대해서는 고려하지 않은 코드라서 그렇습니다.
아래 코드로 바꾸어 주시면 됩니다.
function mk_time($m,$d,$y){
if($y<1970){
$mk_time=mktime(9,0,0,1,1,1970);
$i=1969;
if(checkdate($m,$d,$y)){
do{
for($j=12;$j>=1;$j--){
if($m==$j && $y==$i){
for($k=31;$k>=$d;$k--){
if(checkdate($j,$k,$i)) {
$time++;
} else { //
}
} //for k
break;
} else {
for($z=31;$z>=1;$z--){
if(checkdate($j,$z,$i)) {
$time++;
} else { //
} //if
} //for z
}
} //for j
$i--;
}while($i>=$y);
return $mk_time-(($time)*24*3600);//24*3600=1day
} else {
return $mk_time;
}
} elseif($y>2038){
$mk_time=mktime(9,0,0,1,1,2038);
$i=2039;
if(checkdate($m,$d,$y)){
do{
for($j=12;$j>=1;$j--){
if($m==$j && $y==$i){
for($k=31;$k>=$d;$k--){
if(checkdate($j,$k,$i)) {
$time++;
} else { //
}
} //for k
break;
} else {
for($z=31;$z>=1;$z--){
if(checkdate($j,$z,$i)) {
$time++;
} else { //
} //if
} //for z
}
} //for j
$i++;
}while($i>=$y);
return $mk_time-(($time)*24*3600);//24*3600=1day
} else {
return $mk_time;
}
} else {//if 2038
return mktime(0,0,0,$m,$d,$y);
}
}
아구 추워요~ 감기조심하세요~~~~~~~
아래 코드로 바꾸어 주시면 됩니다.
function mk_time($m,$d,$y){
if($y<1970){
$mk_time=mktime(9,0,0,1,1,1970);
$i=1969;
if(checkdate($m,$d,$y)){
do{
for($j=12;$j>=1;$j--){
if($m==$j && $y==$i){
for($k=31;$k>=$d;$k--){
if(checkdate($j,$k,$i)) {
$time++;
} else { //
}
} //for k
break;
} else {
for($z=31;$z>=1;$z--){
if(checkdate($j,$z,$i)) {
$time++;
} else { //
} //if
} //for z
}
} //for j
$i--;
}while($i>=$y);
return $mk_time-(($time)*24*3600);//24*3600=1day
} else {
return $mk_time;
}
} elseif($y>2038){
$mk_time=mktime(9,0,0,1,1,2038);
$i=2039;
if(checkdate($m,$d,$y)){
do{
for($j=12;$j>=1;$j--){
if($m==$j && $y==$i){
for($k=31;$k>=$d;$k--){
if(checkdate($j,$k,$i)) {
$time++;
} else { //
}
} //for k
break;
} else {
for($z=31;$z>=1;$z--){
if(checkdate($j,$z,$i)) {
$time++;
} else { //
} //if
} //for z
}
} //for j
$i++;
}while($i>=$y);
return $mk_time-(($time)*24*3600);//24*3600=1day
} else {
return $mk_time;
}
} else {//if 2038
return mktime(0,0,0,$m,$d,$y);
}
}
아구 추워요~ 감기조심하세요~~~~~~~
이거때문에 머리아팠었는데 시원하게 해결해 주셔서 너무 감사합니다
너무 감사합니다