Jag undrar i vilka olika typer man kan skriva ut ett datum. Magnus, Såhär kan man göra för att skriva ut "Idag" KeLLeFeNi , hmm, okej. Finns det någon typ för igår, så man kan göra nått sånt här. Magnus, aha, då förstår jag :) Sådär. Nu har jag fått det att fungera. Det skulle vara snällt om du gav synpunkter på kod-snutten, om det går att göra på något smidigare sätt och om något onödigt är med i koden. Magnus, aha. Ska kolla mer på det imorn, återkommer om jag inte får det att fungera eller nått. Tja, du kan köra lite refactoring, Extract Method typ. Undrar en grej hur man får ut Console.WriteLine till ett label. Magnus, Jo jag hade tittat igenom den lite hastigt. Men nu har jag läst igenom den, och jag har kommit fram till den här kodsnutten som fungerar. Skulle vara snällt om du skrev vad som är dåligt osv. Magnus, Vet faktiskt inte riktigt varför jag gör det, har lärt mig att göra det i asp och det har blivit en vana i asp, och det kanske är en ovana i asp.net. Magnus, MagnusDatum i olika former.
Går det att göra på nått sätt att det blir Idag, Igår, 2004-07-24, etc. Eller nått liknande? Sv: Datum i olika former.
På <b>DateTime</b> objektet finns det en rad olika metoder för att manipulera tid och datum, så som <b>AddDays</b>, <b>AddHours</b>, <b>AddMilliseconds</b>, <b>AddMinutes</b>, <b>AddMonths</b>, <b>AddSeconds</b>, <b>AddTicks</b> och <b>AddYears</b>.
Samtliga av dessa metoder kan ta positiva värden för att lägga till, samt negativavärden för att dra ifrån från datumet. Använd <b>DateTime.Now</b> för att få tag i aktuell tid och datum, eller använd en av konstruktorerna för att skapa ett objekt för en viss tid/datum.Sv: Datum i olika former.
<code>
dim dag as string
dag = datetime.today
if dag = DateTime.today then
response.write("Idag")
end if</code>Sv: Datum i olika former.
Inte riktigt då det först och främst skall vara <b>DateTime.Today</b>, samt att det returnerar ett nytt <b>DateTime</b> objekt med dagensdatum samt tiden satt till <b>00:00:00</b>. Skillnaden mellan <b>DateTime.Today</b> och <b>DateTime.Now</b> är just att tidpunkten bibehålls med <b>Now</b> och ignoreras med <b>Today</b>.Sv: Datum i olika former.
<code>
dim dag as string
dag = "& Container.DataItem("Datum") &"
if dag = DateTime.Now then
response.write("Idag")
elseif dag = DateTime.Yesterday Then '(om det finns klass som kan kolla det)
response.write("Igår")
else
response.write(""& DateTime.Now.ToShortDateString(); &"")
end if
</code>Sv: Datum i olika former.
Som jag sa.. använd <b>DateTime.Now</b> eller <b>DateTime.Today</b> om du inte är intresserad av klockan. Använd sedan <b>AddDays</b> metoden på den med ett värde av <b>-1</b> för att få igår, dvs.
Dim Yesterday As DateTime = DateTime.Today.AddDays(-1)
<b>Edit:</b> Nedanstående kod går inte att använda
If dag = DateTime.Now Then
eftersom <b>Now</b> returnerar ett nytt </b>DateTime</b> objekt. Du får iställer skapa <b>dag</b> som ett <b>DateTime</b> objekt där du skickar med ditt värde till konstruktorn.
Sv: Datum i olika former.
återkommer om det blir något problem, tack för hjälpen! Sv: Datum i olika former.
<code>
Sub sida_ItemDataBound(ByVal sender As Object, ByVal e As RepeaterItemEventArgs) Handles sida.ItemDataBound
Dim item As ListItemType = e.Item.ItemType
Dim lblDatum As Label
Dim Datum As Object
Dim Today As DateTime = DateTime.Today
Dim Yesterday As DateTime = DateTime.Today.AddDays(-1)
Datum = e.Item.DataItem("Datum")
lbldatum = CType(e.Item.FindControl("datum"), Label)
If datum > Today Then
lblDatum.Text = "Idag"
ElseIf datum > Yesterday Then
lblDatum.Text = "Igår"
Else
lblDatum.Text = ""& Datum.ToShortDateString() &""
End If
End Sub
</code>Sv: Datum i olika former.
En del små funderingar fick jag faktiskt
[VB.NET]
If datum > Today Then
Här kollar du om <b>datum</b> är <b>större</b> än idag... skulle inte det bli allt från <b>imorgon</b> till <b>oändligheten</b> då? =)
[VB.NET]
ElseIf datum > Yesterday Then
Vad du gör här är att kolla om <b>datum</b> är större än <b>igår</b> vilket i princip betyder <b>idag</b> till <b>oändligheten</b>.
För att jämföra två <b>DateTime</b> objekt bör du använda den statiska <b>DateTime.Compare</b> metoden http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemdatetimeclasscomparetopic.asp
Hoppas det hjälper =)
Sv: Datum i olika former.
Jadu, när jag körde sådär verkade det fungera iaf!Sv: Datum i olika former.
<code>
Sub sida_ItemDataBound(ByVal sender As Object, ByVal e As RepeaterItemEventArgs) Handles sida.ItemDataBound
Dim lblDatum As Label
lbldatum = CType(e.Item.FindControl("datum"), Label)
lblDatum.Text = GetDateStatusText(CType(e.Item.DataItem("Datum"),DateTime))
end sub
</code>
Du kan fixa till dim på samma rad som lbldatum = CTtyp... om du vill. m.m. Men jag valde att göra det mer läsbart.
<code>
Sub GetDateStatusText(date as DateTime) as String
if date = DateTime.Today then
return "Idag"
else if date = DateTime.Today.AddDays(-1) then
return "Igår"
else
return "Tidigare än igår"
end if
End Sub
</code>
SÅ har du fått ner koden en hel del, sedan kan du enkelt fylla på if satsen om du vill. Eller kanske to m. göra if till en case sats.
Mvh JohanSv: Datum i olika former.
Dim t1 As New DateTime(datum)
If DateTime.Compare(t1) = Today Then
Console.WriteLine("Idag")
ElseIf DateTime.Compare(t1) = Yesterday Then
Console.WriteLine("Igår")
Else Date.Time.Compare(t1) 'vad ska man ha för nån typ här? < eller?
Console.WriteLine("blablabla")
End IfSv: Datum i olika former.
Hmm nu vill jag inte alls vara oförskämd, men har du tittat i dokumentationen överhuvudtaget? För det första så <b>DateTime.Compare</b> returnerar <b>-1</b>, <b>0</b> eller <b>1</b> beroende på hur objekten förhåller sig tillvarandra .. vad som returnerar när, står i dokumentationen på länken jag gav dig.
Vidare är inte <b>CompareTo</b> en statiskmetod, dvs. inte en metod du kan anropa direkt på klassen utan som måste anropas på ett objekt. Vill du anropa en statisk metod får du använda <b>DateTime.Compare</b> som tar två <b>DateTime</b> objekt som parametrar.
Sen kan du till en viss del speka om </b>StandardInput</b> och <b>StandardOutput</b> på <b>Console</b> objektet men då detta är strömmar, samt att du inte har tillgån till <b>Console</b> från vare sig ASP.NET sidor eller WinForm applikationer så ser jag inte vitsen med det.. varför inte tilldela "Idag" direkt till <b>Text</b> på din label? Varför vill du gå via <b>Console.WriteLine</b> (som även lägger på en linebreak, så Write hade varit lämpligare om det funnits någon vits).
Läs igenom hur <b>CompareTo</b> och <b>Compare</b> fungerar så kommer du inte ha några problem med att sätta upp dina if-satser. =)
Hoppas det löser sig!Sv: Datum i olika former.
<code>
If DateTime.Compare(Datum, Today) > 0 Then
lblDatum.Text = "Idag"
ElseIf DateTime.Compare(Datum, Yesterday) > 0 Then
lblDatum.Text = "Igår"
Else
lblDatum.Text = ""& Datum.ToShortDateString() &""
End If
</code>Sv: Datum i olika former.
Varför använder du <b>""&</b> och &""</b> när du tilldelar din lable i sista <b>Else</b>-satsen ? För övrigt ser det ok ut.. om det är kod du skall återanvända så refactora den enligt johans princip.Sv: Datum i olika former.
Behöver man inte visa på nått sätt att det är "kod" som ska visas så det inte visas som text? Sv: Datum i olika former.
Vad du gör är att lägga till ingenting i början och slutet av datumet, inget annat. <b>Text</b> propertyn på en <b>Label</b> förväntar sig en <b>string</b> och inget annat, samt att <b>ToShortDateString</b> returnerar just en <b>string</b>-representation av datum objektet.Sv: Datum i olika former.
Out of topic... Men...
Tänk oxå på att när du gör en & mellan strängar så tar det lite mer prestanda, då du skapar olika string objekt mellan varje &. (Vet ej exakt hur kompilatorn gör då den kan omptimera lite olika för hur din kod ser ut. )
"" = Ett string objekt.
& Datum... = Ett nytt
& "" = Ett till
Det kan se ut som du sätter ihop data till en sträng men i själva verket skapar du flera strängar,om du skall klistra ihop många strängar rekomenderar jag att du
kör med StringBuildern då den är byggd för att skapa upp olika stängbitar till en enda sträng.
(Fast observera undtantagsfall. Exemplet ovan är nog inte det bästa, då det skulle gå relativt snabbt i alla fall, där en stringbuilder ev skulle vart meningslöst. Men om du bygge rupp större strängar ha då StringBuildern i bakhuvudet. )
Mvh Johan