2013-12-14 4 views
-1
<?php 
$file = fopen("admin/events/events.txt", "r"); 
while(!feof($file)){ 
    $line = fgets($file); 
$result=htmlentities($line); 
$s = $result; 
preg_match_all('/data-day=\'([^\']*)\'/', $s, $matches); 
foreach($matches[1] as $idx => $datevalue) 
{ 
    $year = substr($datevalue, 0, 4); 
    $month = substr($datevalue, 4, 2); 
    $day = substr($datevalue, 6, 2); 
} 
$line = str_replace("<div data-role='day' data-day='$year$month$day", "<b><u>Datum:</b></u> $year-$month-$day ", $line); 
$line = str_replace("'><div data-role='event' data-name='<h1>", " <br><b><u>Event:</b></u> ", $line); 
$line = str_replace("' data-start='", " <br><b><u>Start:</b></u> ", $line); 
$line = str_replace("' data-end='", " <br><b><u>Einde:</b></u> Tot ", $line); 
$line = str_replace("' data-location='", " <br><b><u>Locatie:</b></u> ", $line); 
$line = str_replace("</h1>", " <br><b><u>Inhoud event:</b></u><br> ", $line); 
$line = str_replace("'></div></div>", "", $line); 
echo "<div class='event'>$line</div>"; 
} 
fclose($file); 

?> 

이 코드를 사용하여 txt 파일을 읽습니다. 그런 다음 이벤트가 표시됩니다. 이제 YYYYMMDD 형식의 날짜가 코드날짜가 올바르게 변환되지 않았습니다.

$result=htmlentities($line); 
$s = $result; 
preg_match_all('/data-day=\'([^\']*)\'/', $s, $matches); 
foreach($matches[1] as $idx => $datevalue) 
{ 
    $year = substr($datevalue, 0, 4); 
    $month = substr($datevalue, 4, 2); 
    $day = substr($datevalue, 6, 2); 
} 

으로 YYYY-MM-DD 형식으로 변환됩니다. 그러나 문제가 있습니다. 21031217 또는 20141025와 같은 날짜는 ... 또는 무엇이든합니다. 날짜가 정확합니다. 그러나 2013 년 1 월을 의미하는 2013 년과 같은 일부 날짜가 있지만 2013-11 년까지 코드가 변환됩니다. :) 따라서 1-9 개월과 1-9 일은 날짜가 다른 형식으로 변환 될 때 문제를 일으키는 한 자릿수입니다. 누군가가 정확한 코드를 인식하고 변형시키는 추가 코드를 제공 할 수 있습니까?

어쩌면 jquery 코드를 조정할 수 있습니까?

나는 certan 날짜에 이벤트를 읽는 jquery 플러그인 달력이 있습니다. 이제는 YYYYMMDD 형식으로 저장됩니다. 이제는 2013122520141022 등의 날짜에 모두 올바르게 작동합니다. 코드는 201411 날짜와 함께 매우 잘 작동합니다. 2014 년 1 월 2014611은 예를 들어 2014 6 월 11 일째. 이제 나는 날짜를 20140101과 20140611과 같이 되길 원합니다. 누군가이 코드를 편집 할 수 있습니까? 비 - 표준 양식 (YYYYmd)에서 날짜를 저장함으로써 들으

var yy; 
var calendarArray =[]; 
var monthOffset = [6,7,8,9,10,11,0,1,2,3,4,5]; 
var monthArray = [["JAN","January"],["FEB","February"],["MAR","March"],["APR","April"],["MAY","May"],["JUN","June"],["JUL","July"],["AUG","August"],["SEP","September"],["OCT","October"],["NOV","November"],["DEC","December"]]; 
var dayArray = ["7","1","2","3","4","5","6"]; 
$(document).ready(function() { 
    $(document).on('click','.calendar-day.have-events',activateDay); 
    $(document).on('click','.specific-day',activatecalendar); 
    $(document).on('click','.calendar-month-view-arrow',offsetcalendar); 
    $(window).resize(calendarScale); 
    calendarSet(); 
    calendarScale(); 
}); 

    function calendarScale() { 
     $(".calendar").each(function() { 
      if($(this).width() < 400 && !$(this).hasClass('small')) { 
       $(this).addClass('small'); 
      } else if($(this).width() > 400 && $(this).hasClass('small')) { 
       $(this).removeClass('small'); 
      } 
     }) 
    } 

    function offsetcalendar() { 
     var cm = parseInt($(".calendar").attr('offset')); 
     if($(this).data('dir') == "left") { 
      calendarSetMonth(cm-1); 
     } else if($(this).data('dir') == "right") { 
      calendarSetMonth(cm+1); 
     } 

    } 

    function orderBy(deli,array) { 
     var p = array.slice(); 
     var o = p.length; 
     var y,t; 
     var temparray = []; 
     for(var u=0; u<o;u++) { 
      for(var uu=0;uu<p.length;uu++) { 
       if(uu==0) { 
        t = uu; 
        y = p[uu]; 
       } 
       else if(parseInt(p[uu][deli].replace('.','')) < parseInt(y[deli].replace('.',''))) { 
        y = p[uu]; 
        t = uu; 
       } 
      } 
      temparray.push(y); 
      p.splice(t,1); 
     } 
     return temparray; 
    } 

    function calendarSet() { 
     $(".calendar").append('<div class="calendar-month-view"><div class="calendar-month-view-arrow" data-dir="left">‹</div><p></p><div class="calendar-month-view-arrow" data-dir="right">›</div></div><div class="calendar-holder"><div class="calendar-grid"></div><div class="calendar-specific"><div class="specific-day"><div class="specific-day-info" i="day"></div><div class="specific-day-info" i="month"></div></div><div class="specific-day-scheme"></div></div></div>'); 
     $(".calendar").each(function() { 
      if($(this).data("color") == undefined) { 
       $(this).data("color","red"); 
      } 
      $(this).find('[data-role=day]').each(function() { 
       var tempdayarray = []; 
       $(this).find('[data-role=event]').each(function() { 
        var tempeventarray = []; 
        tempeventarray["name"] = $(this).data("name"); 
        tempeventarray["start"] = $(this).data("start"); 
        tempeventarray["end"] = $(this).data("end"); 
        tempeventarray["location"] = $(this).data("location"); 
        tempdayarray.push(tempeventarray); 
       }); 
       calendarArray[$(this).data('day')] = tempdayarray; 
      }); 
     }); 
     $(".calendar [data-role=day]").remove(); 
     calendarSetMonth(); 
    } 
    function activateDay() { 
     $(this).parents('.calendar').addClass('spec-day'); 
     var di = new Date(parseInt($(this).attr('time'))); 
     var strtime = $(this).attr('strtime'); 
     var d = new Object(); 
     d.day = di.getDate(); 
     d.month = di.getMonth(); 
     d.events = calendarArray[strtime]; 
     d.tocalendar = tocalendar; 
     d.tocalendar(); 
    } 
    var tocalendar = function() { 
     $(".specific-day-info[i=day]").html(this.day); 
     $(".specific-day-info[i=month]").html(monthArray[this.month][0]); 
     if(this.events !== undefined) { 
     var ev = orderBy('start',this.events); 
     for(var o = 0; o<ev.length;o++) { 
      $(".specific-day-scheme").append('<div class="specific-day-scheme-event"><p>'+ev[o]['name']+'</p><p data-role="dur">'+ev[o]['start']+' - '+ev[o]['end']+'</p><p data-role="loc">'+ev[o]['location']+'</p></div>'); 
     } 
     } 
    } 
    function activatecalendar() { 
     $(this).parents('.calendar').removeClass('spec-day'); 
     $(".specific-day-scheme").html(''); 
    } 
    function calendarSetMonth(offset) { 
     $(".calendar-grid").html(''); 
     var d = new Date(); 
     var c = new Date(); 
     var e = new Date(); 
     if(offset !== undefined) { 
      d.setMonth(d.getMonth()+offset); 
      e.setMonth(e.getMonth()+offset); 
      $(".calendar").attr('offset', offset); 
     } else { 
      $(".calendar").attr('offset', 0); 
     } 
     $(".calendar .calendar-month-view p").text(monthArray[d.getMonth()][1]+' '+d.getFullYear()); 
      d.setDate(1); 
      if(dayArray[d.getDay()] == 1) { 
       d.setDate(d.getDate()-7); 
      } else { 
       d.setDate(d.getDate()-dayArray[d.getDay()]+1); 
      } 
      for(var i=0;i<42;i++) { 
       d.setDate(d.getDate()+i); 
       var cal_day = $('<div class="calendar-day"><div class="date-holder">'+d.getDate()+'</div></div>'); 
       if(d.getMonth() !== e.getMonth()) { 
        cal_day.addClass('other-month'); 
       } 
       if(d.getTime() == c.getTime()) { 
        cal_day.addClass('this-day'); 
       } 
       var strtime = d.getFullYear()+''+(d.getMonth()+1)+''+d.getDate(); 
       if(calendarArray[strtime] !== undefined) { 
        cal_day.addClass('have-events'); 
       } 
       var cal_day_eventholder = $('<div class="event-notif-holder"></div>'); 
       if(calendarArray[strtime] != undefined) { 
        for(var u=0;u<3 && u<calendarArray[strtime].length;u++) { 
         cal_day_eventholder.append('<div class="event-notif"></div>') 
        } 
       } 
       cal_day.attr('strtime',strtime); 
       cal_day.attr('time',d.getTime()); 
       cal_day.prepend(cal_day_eventholder); 

       $(".calendar-grid").append(cal_day); 
       d.setDate(d.getDate()-i); 
      } 
    } 
+0

당신은 것을 가장 좋아하는 일을하고 s의 계산 결과에 따라 서식 지정 및 서식 지정. –

+1

나는 그것이 쉬운 일이라고 생각하지 않는다. '2013111'은 무엇이 될까요? '2013-11-01' 또는'2013-01-11'입니까? – bansi

+0

idd,하지만 구조 의이 종류에 대한 전체 jquery 플러그인을 기반으로 ... 나는 대신 01 02 너무 알고 :)하지만 그게 너무 늦었 : p – Johan

답변

0

이 문제에 대한 솔루션은 데이터의 임의 해석을 사용합니다. 특정 날짜에는 잘 될 수도 있지만, 항상 잘못된 방식으로 해석되는 날짜와 논리적으로 어떤 문자열에서도 뒤 따르지 않는 날짜가 있습니다. 이 문제를 해결하려면 이있는 형식을 고정 너비 형식 (YYYYMMDD)으로 변경해야합니다.

질문의 첫 번째 부분에 "사용자가 올바른 코드를 인식하고 변형 할 수있는 추가 코드를 제공 할 수 있습니까?"라는 질문에 대한 대답이 아닐 수도 있지만, 나는 이것이 유일한 것이라고 생각합니다. 질문의 두 번째 부분에 대한 정답.


난 당신이 날짜를 해석 어디 부분을 숨길 않았다 어디에서 찾을 코드 100 개 + 라인을 통해 침을 기꺼이 아니지만, 당신이 (이 날짜처럼 보이는 ALA) 모든 날짜가 이해하려면 말했다 날짜가 잘못 될 수있다하더라도, 당신은 날짜와 일치하는 정규 표현식을 사용할 수 있습니다

var a = "201311"; 
var b = a.match(/^([0-9]{4})([01][012]|[0-9])([1-9][0-9]{0,1})$/); 
console.log(b.slice(1).join("-")); // 2013-1-1 

그러나 다음 날짜 표현하는 것은 불가능합니다

Expected "2013-1-11", got "2013-11-1" 
Expected "2013-1-12", got "2013-11-2" 
Expected "2013-1-13", got "2013-11-3" 
Expected "2013-1-14", got "2013-11-4" 
Expected "2013-1-15", got "2013-11-5" 
Expected "2013-1-16", got "2013-11-6" 
Expected "2013-1-17", got "2013-11-7" 
Expected "2013-1-18", got "2013-11-8" 
Expected "2013-1-19", got "2013-11-9" 
Expected "2013-1-21", got "2013-12-1" 
Expected "2013-1-22", got "2013-12-2" 
Expected "2013-1-23", got "2013-12-3" 
Expected "2013-1-24", got "2013-12-4" 
Expected "2013-1-25", got "2013-12-5" 
Expected "2013-1-26", got "2013-12-6" 
Expected "2013-1-27", got "2013-12-7" 
Expected "2013-1-28", got "2013-12-8" 
Expected "2013-1-29", got "2013-12-9" 
+0

내가 도움을 위해 문제를 참조하십시오, 나는 뮤 플러그인을 재작 성하려고합니다 – Johan

+0

문제가 해결 된 코드의 조각으로 나는 내 플러그인을 조정 :) :) – Johan

관련 문제