Je suis en train de calculer le "timeago" et je suis en train d'arriver à une décrépitude dans mon code.Discrepence de calcul de date (JavaScript VS .NET)
En utilisant la date d'aujourd'hui
7 Novembre, 2010
Si je 1 Septembre, 2010 alors à la fois mon code .NET et mon code JS dire "2 mois"
Si j'utilise le 31 août 2010 alors mon code .NET dit "3 mois" et mon code JS dit "2 mois"
Cet écart persiste jusqu'à le 9 août 2010.
Fondamentalement, le DATEDIFF est "off" du 10 Août - 31 Août basé sur la date d'aujourd'hui du 7 Novembre
Voici le JavaScript (extrait de plugin "timeago")
var words = seconds < 45 && substitute($l.seconds, Math.round(seconds)) ||
seconds < 90 && substitute($l.minute, 1) ||
minutes < 45 && substitute($l.minutes, Math.round(minutes)) ||
minutes < 90 && substitute($l.hour, 1) ||
hours < 24 && substitute($l.hours, Math.round(hours)) ||
hours < 48 && substitute($l.day, 1) ||
days < 30 && substitute($l.days, Math.floor(days)) ||
days < 60 && substitute($l.month, 1) ||
days < 365 && substitute($l.months, Math.floor(days/30)) ||
years < 2 && substitute($l.year, 1) ||
substitute($l.years, Math.floor(years));
Et voici mon code .NET (écrit par moi)
Public Function ToDuration(ByVal dt As Date?, _
Optional ByVal suffixAgo As String = Nothing) As String
If Not dt Is Nothing Then
Dim theDate As Date = dt
Dim SecondsAppart As Integer = DateDiff(DateInterval.Second, theDate, Now)
Dim output As String
If SecondsAppart < 86400 Then
Select Case SecondsAppart
Case Is <= 59 : output = "less than a minute " & suffixAgo
Case Is <= 119 : output = "about a minute " & suffixAgo
Case Is <= 3599 : output = DateDiff(DateInterval.Minute, theDate, Now) & " minutes " & suffixAgo
Case Is <= 7199 : output = "about an hour " & suffixAgo
Case Else : output = DateDiff(DateInterval.Hour, theDate, Now) & " hours " & suffixAgo
End Select
Else
Dim DaysAppart As Integer = DateDiff(DateInterval.Day, theDate, Now)
Select Case DaysAppart
Case Is <= 1 : output = "yesterday"
Case Is <= 30 : output = DateDiff(DateInterval.Day, theDate, Now) & " days " & suffixAgo
Case Is <= 60 : output = "about a month " & suffixAgo
Case Is <= 365 : output = DateDiff(DateInterval.Month, theDate, Now) & " months " & suffixAgo
Case Is <= 730 : output = "about a year " & suffixAgo
Case Else : output = DateDiff(DateInterval.Year, theDate, Now) & " years " & suffixAgo
End Select
End If
Return output
Else
Return String.Empty
End If
End Function
le problème que je vais avoir est fondamentale, ainsi que une logistique.
- Quel code est "correct" quand il s'agit de DateDiff? (IE: Est-ce que 2 mois et 14 jours sont considérés comme 2 mois ou 3?)
- Quelle est la meilleure façon de les aligner en conséquence?
Une chose que je ferais est de substituer <= avec <. La façon dont vous codez fonctionne maintenant, vous dites que deux mois se sont écoulés depuis environ un mois. Même que 730 jours est d'environ un an. –
Je me demande si c'est une coïncidence que vous ayez choisi la date dans laquelle le fuseau horaire de la plupart des États-Unis passe de la lumière du jour à l'heure normale. – kennebec
haha, n'a pas même chose à propos de DST. Je ne sais pas si cela s'applique ici ou non. –