2011-03-28 4 views
4

Indépendamment de nombreux messages, j'ai lu la magie encore dans mon code. J'ai la date DateTime dans db ('2011-03-30 00: 00: 00.000') que je récupère pour la page asp.net/mvc où du javascript a besoin de le lire et de le comparer. La magie dans ce qui suit:DateTime JavaScript vs C#

<% 
DateTime unixTimeOffset = new DateTime(1970, 1, 1, 0, 0, 0, 0); 
DateTime testDate = new DateTime(2011,03,30,0,0,0,0); 
%> 
<%= (testDate - unixTimeOffset).TotalMilliseconds %> 
... 

Dernière chaîne du code me donne cette valeur: 1301443200000 Lorsque je tente de le lire en JavaScript Je:

val myDate = new Date(1301443200000); 

Et myDate est Mar 29 mars 2011 20:00:00 GMT-0400 (heure avancée de l'Est) {} Mais pas un 30 mars comme il se doit. Je comprends qu'il fournit une date de référence à l'heure locale, GMT-4, mais quelle est la solution pour le rendre indépendant? Des idées? Merci.

Répondre

1

Votre code est correct. La variable myDate contient la date correcte car Tue Mar 29 2011 20:00:00 GMT-0400 est le même moment que Wed Mar 30 2011 00:00:00 GMT+0000. Je suppose que vous voyez le premier puisque c'est le fuseau horaire de votre ordinateur. Utilisez myDate.toUTCString() pour voir la date en UTC.

6

C# Dates connexes:

Vous voudrez peut-être envisager d'utiliser DateTime.ToUniversalTime() et .UTCNow(), qui vous permettra de garder tous les jours indépendamment des fuseaux horaires.

DateTime date = DateTime.UTCNow(); 

Pour connaître les dates Javascript-connexes:

Javascript dispose d'un UTC Method qui devrait vous obtenir le temps universel ainsi.

//Declaration 
var date = new Date(Date.UTC(YYYY,MM,DD)); 

//Use 
var newDate = date.toUTCString(); 

Hope this helps :)

+0

'new Date (Date.UTC (1301443200000))' Renvoie 'Invalid Date {}' dans Firebug. Ce n'est pas un argument valable. Ceci est la signature: 'Date.UTC (année, mois [, date [, heures [, min [, sec [, ms]]]])' –

+0

@lwburk - Déclaration clairement confus et utilisation :) Merci! –

+0

Notez que je ne pense pas que la solution JavaScript aide beaucoup, car ce qui est vraiment nécessaire, c'est le 'YYYY',' MM', et 'DD', donc ils ne sont pas disponibles en tant que * input *, ils sont désirés comme *sortie*. –

2

Obtenez le décalage horaire dans le client et l'ajouter à la valeur du serveur. Comme ceci:

var serverOffset = 1301443200000; 
var localOffset = myDate.getTimezoneOffset() * 60 * 1000; 
var myDate = new Date(serverOffset + localOffset); 
console.log(myDate); // Wed Mar 30 2011 00:00:00 

S'il vous plaît noter que Tue Mar 29 2011 20:00:00 GMT-0400 (Eastern Daylight Time) est le même moment que votre date d'origine en UTC. Cette méthode crée une nouvelle date qui représente un nouveau point dans le temps. Cependant, si vous essayez simplement d'afficher la même valeur de date, cette méthode fait l'affaire.

Vous pouvez également utiliser des méthodes UTC de Date pour imprimer votre date originale en UTC:

function pad(num) { 
    return ("0" + num).slice(-2); 
} 

function formatDate(d) { 
    return [d.getUTCFullYear(), 
      pad(d.getUTCMonth() + 1), 
      pad(d.getUTCDate())].join("-") + "T" + 
      [pad(d.getUTCHours()), 
      pad(d.getUTCMinutes()), 
      pad(d.getUTCSeconds())].join(":") + "Z"; 
} 

formatDate(new Date(1301443200000)); 

Sortie:

"2011-03-30T00:00:00Z"