2013-12-14 31 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格式的日期轉換爲YYYY-MM-DD格式的代碼日期未正確轉換

$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); 
} 

。但有一個問題。對於像21031217或20141025這樣的日期,......或其他。日期轉換正確。但是有一些像201311這樣的日期,意味着2013年1月份的第一次,但該代碼轉換爲2013-11年 - 所以這不是很好:)。因此,1-9和1-9天是單個數字,當日期轉換爲其他格式時會產生問題。有人可以提供一個額外的代碼來識別和轉換正確嗎?

也許jQuery代碼可以調整?

我有一個jquery插件日曆,讀取certan日期事件。現在它被保存爲YYYYMMDD格式,現在所有的日期都可以正常工作,比如20131225,20141022等等......代碼的工作日期也很好201411,這是2014年1月2014年第一個2014年第6個月第11天。現在我想要日期如20140101和20140611等等。有人可以編輯此代碼。 THX

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

通過存儲在一個不規範的形式(YYYYmd)日期,任何解決這個問題將使用數據的任意解釋。雖然它可能會在某些日期適用,但總會有以錯誤方式解釋的日期,以及永遠不會從任何字符串中邏輯跟隨的日期。如果你想解決這個問題,你只需就有將格式更改爲固定寬度格式(YYYYMMDD)。

雖然這可能不是您對問題的第一部分所期望的答案,「有人可以爲我提供額外的代碼來識別和轉換正確嗎?」,我相信這是唯一的正確回答你的問題的第二部分。


我不願意通過100+行的代碼吐找到你並隱藏了一部分,你解釋的日期,但如果你想每一個日期是有道理的(就像它看起來像一個日) ,即使上述日期可能是不正確的,你可以使用正則表達式匹配日期:

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

我看到問題,thx爲我的幫助,我嘗試重寫mu插件 – Johan

+0

問題解決了,用我的一段代碼設法調整我的插件:) so thx – Johan