2010-07-06 21 views
2

J'ai un côté client JavaScript qui génère une date en JavaScript (new Date(2007,5,1)).Javascript format de date ASP.net sans fuseau horaire info - décalages timezone

J'ai besoin que cette date soit transmise à un champ caché auquel le code derrière peut accéder.

Mon problème est que lorsque le champ caché est converti en datetime DotNet, l'heure est incorrecte. C'est parce que le JavaScript inclut des informations de fuseau horaire du navigateur client. DotNet utilise ensuite cette information pour recalculer l'heure en fonction de la différence entre l'heure du serveur et celle du client.

Ce dont j'ai besoin de JavaScript, c'est juste l'année, le mois et le jour.

Je ne veux pas passer par 3 valeurs int à mon code, car ce sera un changement majeur pour l'ensemble de l'application.

Quelle est la meilleure façon pour moi d'accomplir cela?

Si je peux définir une heure UTC sans informations de fuseau horaire, je pense que cela pourrait fonctionner.

Toute aide est appréciée.

Répondre

0

Vous pouvez construire une chaîne du javascript objet Date que vous avez créé - il a getDate(), getMonth() et getFullYear() méthodes que vous pouvez utiliser pour construire la chaîne exacte que vous voulez dans le champ caché.

1

demo

Si je comprends bien,

vous avez besoin .toDateString()

var date = new Date(2007,5,1); 

document.write(date); 
document.write("<br><br>versus<br><br>"); 
document.write(date.toDateString()); 

impressions

Fri Jun 01 2007 00:00:00 GMT+0800 (Taipei Standard Time) 

versus 

Fri Jun 01 2007 
0

Je recommande d'utiliser une spécification de format C# lorsque vous obtenez les valeurs dans le code derrière le fichier. Laissez-moi vous expliquer ce que je veux dire - Le format de l'heure de date pour la date (...) en JavaScript est comme suit

"mar 1 juin 11:12:15 UTC + 0530 2010"

qui en C# se traduirait par la chaîne de format suivant - « ddd MMM d hh:mm:ss UTCzzz yyyy »

avec cette chaîne de format utiliser la DateTime.ParseExact(string <Hidden Field Value>, format, provider) pour obtenir la valeur correcte pour le datetime en C#.

Utiliser le fournisseur en tant que System.Globalization.CultureInfo.InvariantCulture.

1

Vous pouvez utiliser DateTimeOffset.ParseExact pour analyser une chaîne à une valeur DateTimeOffset en utilisant le format que vous spécifiez:

 string dateString = "Fri Jun 01 2007 00:00:00 GMT+08:00"; 
     DateTimeOffset date = DateTimeOffset.ParseExact(dateString, "ddd MMM dd yyyy hh:mm:ss 'GMT'zzz", CultureInfo.InvariantCulture); 

Vous devez mettre GMT entre guillemets sinon M sera interprété comme un caractère de format.

Malheureusement, il n'est pas possible d'ignorer une partie de la valeur de chaîne. Si votre chaîne contient le nom du fuseau horaire, vous devez d'abord le découper et obtenir la pièce sans la description

 string dateString = "Fri Jun 01 2007 00:00:00 GMT+08:00 (Taipei Standard Time)"; 
     var parts=dateString.Split('('); 
     string datePart = parts[0].TrimEnd(); 
     var date=DateTimeOffset.ParseExact(datePart,"ddd MMM dd yyyy hh:mm:ss 'GMT'zzz",CultureInfo.InvariantCulture);