2009-09-24 6 views
0

J'ai une validation de date côté client qui nécessite qu'une date particulière soit un mois à partir d'une date différente J'utilise d.setMonth(d.getMonth() + 1) et fonctionne principalement bien.Net DateTime.AddMonths (1) ne fonctionne pas de la même manière que Javascript d.setMonth (d.getMonth() + 1)

Pour les problèmes de fin de mois comme au 31/01/2009, il revient le 3/3/2009 et c'est génial - c'est comme ça que je préfère le gérer.

Dans le code derrière, je génère également cette date, mais DateTime.AddMonths(1) renvoie 28/02/2009 donc ce n'est pas bon.

Y a-t-il un moyen de contourner ce problème?

+2

Je ne peux pas croire que vous pensez que 3/3 est exactement un mois après 1/31, mais peu importe! –

+0

c'est exactement 30 jours après 1/31 ... – TJMonk15

+0

Peu importe ce que je pense - C'est le comportement désiré des pouvoirs en place. – HighHat

Répondre

0

votre exemple de 31.1.2009 être changé pour 3/3/2009 il semble que vous voulez juste un moyen d'avancer la date spécifiée par le nombre de jours dans son mois respectif. (Ajout de 31 jours à la date si elle est en Janvier, 28 si en Février au cours d'une année non bissextile, etc ...)

donc votre code ressemblerait à quelque chose comme:

d = d.AddDays(DateTime.DaysInMonth(d.Year, d.Month)) 
3

La fonction .NET est sans aucun doute plus intelligente. Mais si vous voulez stupide vers le bas pour se comporter comme Javascript, ajouter 31 jours au lieu ...

DateTime.AddDays(31) 
+0

On pourrait le penser, mais pour 2/1/2009 je veux obtenir 3/1/2009 donc ça ne marche pas. – HighHat

+0

Oh wow. Donc, un mois après le 1/31 est 3/3. Et un mois après 2/1 est 3/1. Cela a beaucoup de sens, n'est-ce pas? –

+1

Oh, je sais que cela n'a pas de sens, mais je dois faire en sorte que le site imite le comportement de l'application de bureau que je n'ai aucun contrôle ou dire. Ne le prenez pas personnellement. – HighHat

0

Ajouter à Josh de répondre ... Pas vraiment sûr pourquoi vous voulez faire cela mais si vous voulez un comportement spécifique qui n'est pas intégré, rappelez-vous que vous avez la possibilité d'écrire des extensions. Cette extension ajoute une méthode appelée "AddMonthsJ" à DateTime. Cela donne le comportement que je pense que vous recherchez et permet de l'utiliser facilement. Vous pouvez modifier l'extension pour qu'elle soit ce que vous recherchez en changeant de mois.

class Program 
{ 
    static void Main(string[] args) 
    { 
     DateTime myDate = DateTime.Parse("01/31/2009"); 

     myDate = myDate.AddMonthsJ(1); 

     Console.WriteLine(myDate.ToShortDateString()); 

     Console.ReadLine(); 
    } 
} 

public static class Extensions 
{ 
    public static DateTime AddMonthsJ(this DateTime oldDate, int months) 
    { 
     return (oldDate.AddDays(months * 31)); 
    } 
} 
Questions connexes