2017-11-27 3 views
0

Ich möchte in Sekunden, Minuten, Stunden, Tage, Monate und Jahre von Datetime erstellt werden.Rückkehr Monate und Tage von TimeSpan asp.net

schrieb ich dieses Code-Snippet

public static string ReturnCreatedSince(DateTime createdOn) 
    { 
     //Get current datetime 
     var today = DateTime.Now; 

     // Get days in current month 
     var daysInMonth = DateTime.DaysInMonth(today.Year, today.Month); 

     double seconds = 60; 
     double minutes = seconds * 60; 
     double hours = minutes * 60; 
     double days = hours * 24; 
     //double weeks = days * 7; 
     double months = days * daysInMonth; 
     double years = months * 12; 

     //Convert created datetime to seconds 
     var datetimeInSeconds = (today - createdOn).TotalSeconds; 

     var createdSince = string.Empty; 

     if (datetimeInSeconds <= seconds) //seconds between 1 to 60 
     { 
      return TimeSpan.FromSeconds(datetimeInSeconds).Seconds.ToString() + " sec"; 
     } 
     else if (datetimeInSeconds <= minutes)// Minuites between 1 to 60 
     { 
      return TimeSpan.FromSeconds(datetimeInSeconds).Minutes.ToString() + " mins"; 
     } 
     else if (datetimeInSeconds <= hours)// Hours between 1 to 24 
     { 
      return TimeSpan.FromSeconds(datetimeInSeconds).Hours.ToString() + " hrs";     
     } 
     else if (datetimeInSeconds <= days)// Days between 1 to 24 
     { 
      return TimeSpan.FromSeconds(datetimeInSeconds).Days.ToString() + " jrs"; 
     }   
     else if (datetimeInSeconds <= months)// Months between 1 to 24 
     { 
      return (datetimeInSeconds/months).ToString() + " m"; 
     } 
     else if (datetimeInSeconds <= years)// Years between 1 to 12 
     { 
      return (datetimeInSeconds/years).ToString() + " yrs"; 
     } 
     else 
     { 
      return createdOn.ToShortDateString(); 
     } 
    } 

I

Herausgegeben

Für eine gegebene Datumzeit

wenn die Anzahl der den Code mit den folgenden Werten getestet Sekunde ist kleiner als 60, dann sollte es den Wert zurückgeben in zweiter. , wenn die Anzahl der zweiten weniger größer 60 und kleiner als (60 * 60) Sekunden, dann sollten sie den Wert in Minuten zurückkehren, das gleiche für Stunden gelten, Tage Monate und Jahre

Jetzt habe ich dieses Datum "createdOn": "2017-10-16T14:41:16.557" und Rückkehr 41 Tage statt 1 Monat erwartet.

wie kann ich es beheben

+1

Warum ist es nicht korrekt? Haben Sie versucht, die Berechnung manuell durchzuführen? Welches Ergebnis erwartest du? – Pac0

+0

das macht für mich keinen Sinn: 'doppelte Sekunden = 60; double minutes = seconds * 60; ': so enthält die Variable' minutes' 3600. Willst du das? Dann denke ich, es ist keine Anzahl von Minuten (was der Variablenname für jemanden wie mich bedeuten würde, der Ihren Code liest). Gleiche Bemerkung für die nächsten Variablen. – Pac0

+0

Was ist los? Sie möchten 38 Tage statt 1 Monat? Dann sind deine 'if'-Bedingungen falsch. –

Antwort

1

Es könnte einfacher sein, eingebettete Methoden zu verwenden:

DateTime startDate = new DateTime(1970, 01, 01); 
DateTime endDate = DateTime.Now.ToUniversalTime(); 
TimeSpan diff = (endDate - startDate); 

Console.WriteLine("Number of seconds:" + diff.TotalSeconds); 
Console.WriteLine("Number of minutes:" + diff.TotalDays); 
Console.WriteLine("Number of hours:" + diff.TotalHours); 
Console.WriteLine("Number of days:" + diff.TotalDays); 

//months 
int nbMonths = ((endDate.Year - startDate.Year) * 12) + endDate.Month - startDate.Month; 
Console.WriteLine("Number of months:" + nbMonths); 
//years 
int nbYears = endDate.Year - startDate.Year; 
Console.WriteLine("Number of years:" + nbYears); 
Console.ReadKey(); 
+0

@daniele lass es versuchen und sehen, aber du hast nicht hinzugefügt, wenn Teil basierend darauf ich in der Lage sein werde zu sagen, es fällt zwischen Sekunden oder Minuten oder Stunden etc ... – Djama

+0

ja ich habe gerade die DateTime/Zeitspannen Methode, um Rechenfehler loszuwerden, können Sie die gleiche if/else Logik nach anwenden –

Verwandte Themen