2010-04-22 8 views
0
public static string TimeLine2(this HtmlHelper helper, string myString2) 
{ 
    StringBuilder myString3 = new StringBuilder(); 

    DateTime start = new DateTime(2010, 1, 1); 
    DateTime end = new DateTime(2011, 12, 12); 

    myString3.Append("<table>"); 


     myString3.Append("<tr>"); 
     for (DateTime date = start; date <= end; date = date.AddDays(1)) 
     { 
      DayOfWeek dw = date.DayOfWeek; 
      var g = date.Month; 
      var sun = " "; 

      switch (dw) 
      { 
       case DayOfWeek.Sunday: 
        sun = "S"; 
        break; 
       case DayOfWeek.Monday: 
        sun = "M"; 
        break; 
       case DayOfWeek.Tuesday: 
        sun = "T"; 
        break; 
       case DayOfWeek.Wednesday: 
        sun = "W"; 
        break; 
       case DayOfWeek.Thursday: 
        sun = "T"; 
        break; 
       case DayOfWeek.Friday: 
        sun = "F"; 
        break; 
       case DayOfWeek.Saturday: 
        sun = "S"; 
        break; 
      } 

      myString3.Append("<td>" + sun + " " + g + "</td>"); 
     } 

     myString3.Append("</tr>"); 

     myString3.Append("<tr>"); 
     for (DateTime date = start; date <= end; date = date.AddDays(1)) 
     { 
      var f = date.Day; 
      myString3.Append("<td>" + f + "</td>"); 
     } 
     myString3.Append("</tr>"); 

    myString3.Append("</table>"); 

    return myString3.ToString(); 
} 

Fondamentalement, ce que j'ai ici est quelques boucles montrant tous les jours de la semaine et aussi tous les jours dans un mois. Tout cela est placé à l'intérieur d'une table, donc vous obtenezRegroupement des mois d'un intervalle de temps particulier en utilisant DateTime

 
MTWTFSSMT W T F S S M   M TWTFSSM 

    12345678910 11 12 13 14 + + to 31 1234567 

Je suis en train de coder une façon dont je peux partager tous ces jours de la semaine et les jours en mois afin que mon code retourne chaque mois avec tous ses jours dans le mois et tous ses jours de la semaine, pas seulement tous mes mois entre mon timeSpan mais les divise donc

 
MAY 
MTWTFSSMTWTFSSMTWTFSSMTWTFSSMTWTF 
    12345678 

JUNE 
MTWTFSSMTWTFSSMTWTFSSMTWTFSSMTWTF 
    123456789 

Répondre

1

LINQ:

DateTime startDate = new DateTime(2010, 1, 1); 
DateTime endDate = new DateTime(2010, 12, 31); 

int monthCount = 
    (endDate.Month - startDate.Month + 1) + 
    (endDate.Year - startDate.Year) * 12; 

Enumerable 
    .Range(0, monthCount) 
    .Select(x => new DateTime(startDate.Year, startDate.Month, 1).AddMonths(x)) 
    .ToList() 
    .ForEach(d1 => 
    { 
     string month = d1.ToString("MMMM"); 
     // here should be your code 
     // to work with months 

     Enumerable 
      .Range(0, d1.AddMonths(1).AddDays(-1).Day) 
      .Select(x => d1.AddDays(x)) 
      .ToList() 
      .ForEach(d2 => 
      { 
       string dayOfWeek = d2.ToString("ddd"); 
       string day = d2.Day.ToString(); 
       // here should be your code 
       // to work with days 
      }); 
    }); 

OK, la prochaine variante sans LINQ:

StringBuilder sb = new StringBuilder(); 

DateTime startDate = new DateTime(2010, 1, 1); 
DateTime endDate = new DateTime(2012, 12, 31); 

int monthCount = 
    (endDate.Month - startDate.Month + 1) + 
    (endDate.Year - startDate.Year) * 12; 

for (int i = 0; i < monthCount; i++) 
{ 
    DateTime d1 = new DateTime(startDate.Year, startDate.Month, 1).AddMonths(i); 
    string month = d1.ToString("MMMM"); 

    sb.AppendFormat("<p>{0}</p>", month); 

    int daysInMonth = d1.AddMonths(1).AddDays(-1).Day; 
    StringBuilder daysOfWeekRow = new StringBuilder(); 
    StringBuilder daysRow = new StringBuilder(); 
    for (int j = 0; j < daysInMonth; j++) 
    { 
     DateTime d2 = d1.AddDays(j); 
     string dayOfWeek = d2.ToString("ddd"); 
     string day = d2.Day.ToString(); 

     daysOfWeekRow.AppendFormat("<td>{0}</td>", dayOfWeek); 
     daysRow.AppendFormat("<td>{0}</td>", day); 
    } 
    sb.AppendFormat(
     "<table><tr>{0}</tr><tr>{1}</tr></table>", 
     daysOfWeekRow.ToString(), 
     daysRow.ToString() 
    ); 
} 

string result = sb.ToString(); 

Vous pouvez modifier la mise en forme de la sortie comme vous le souhaitez Je n'ai fourni que l'exemple de base. La principale chose est de parcourir les dates nécessaires (pour utiliser ou ne pas utiliser LINQ est votre option, mais vous pouvez convenir d'une solution avec LINQ est plus élégant) et ajouter une mise en forme personnalisée dans les endroits nécessaires (je mets des commentaires où pour le faire avec le premier exemple).

+0

Merci l'homme, j'apprécie, dois-je faire une autre boucle pour obtenir plus d'un an.? – Calibre2010

+1

@ Calibre2010: non, une autre boucle n'est pas nécessaire ici. La seule chose que vous avez à faire est de changer la variable start et/ou endDate. – Alex

+0

Si j'ajoute une variable à la valeur de l'année, elle est erronée car elle ne voit pas d'augmentation dans l'année, elle augmente simplement dans la valeur mensuelle? – Calibre2010

1
public static string TimeLine(this HtmlHelper helper, string myString1) 
    { 
     StringBuilder string2 = new StringBuilder(); 

     DateTime startDate = new DateTime(2010, 1, 1); 
     DateTime endDate = new DateTime(2011, 12, 12); 

     string2.Append("<table>"); 

     for (DateTime date = startDate; date <= endDate; date = date.AddMonths(1)) 
     { 



      string2.Append("<p>" + date.AddMonths(1) + "</p>"); 

      //DateTime ddd = new DateTime(year, month); 

      string2.Append("<tr>"); 

      for (date = startDate; date <= endDate; date = date.AddMonths(1).AddDays(1)) 
      { 
       DayOfWeek dw = date.DayOfWeek; 

       var dateShortHand = ""; 

       switch (dw) 
       { 
        case DayOfWeek.Monday: 
         dateShortHand = "M"; 
         break; 
        case DayOfWeek.Tuesday: 
         dateShortHand = "T"; 
         break; 
        case DayOfWeek.Wednesday: 
         dateShortHand = "W"; 
         break; 
        case DayOfWeek.Thursday: 
         dateShortHand = "T"; 
         break; 
        case DayOfWeek.Friday: 
         dateShortHand = "F"; 
         break; 
        case DayOfWeek.Saturday: 
         dateShortHand = "S"; 
         break; 
        case DayOfWeek.Sunday: 
         dateShortHand = "S"; 
         break; 
       } 
       string2.Append("<td>" + dateShortHand + "</td>"); 

      } 
      string2.Append("</tr>"); 





      string2.Append("<tr>"); 

      //for (int i = 1; i <= ff; date = date.AddDays(1)) 
      //{ 

      // var f = date.Day; 
      // string2.Append("<td>" + f + "</td>"); 

      //} 
      string2.Append("</tr>"); 



     } 



     string2.Append("</table>"); 


     return string2.ToString(); 

    } 

Salut, je ne suis pas au courant de LINQ, bien que j'ai essayé de faire une alternative signifie que je suis encore un peu de mal. Je pense que c'est avec comment j'ai codé les boucles for. Y at-il de toute façon à faire cela autrement d'utiliser linq?

Questions connexes