web-dev-qa-db-fra.com

Conversion de C # DateTime en Javascript Date

J'ai une fonction en Javascript qui reçoit un DateTime C # de MVC. Si la date est nulle, elle devrait renvoyer "-", si c'est une date valide, elle devrait renvoyer la date formatée.

IMPORTANT: Il n'est pas possible d'envoyer la date dans un autre format à partir de C #.

Javascript:

function CheckDate(date) {

  if (date == "Mon Jan 01 0001 00:00:00 GMT+0000 (GMT Daylight Time)")
    return "-";
  else {
    var dat = new Date(date);
    return dat.getFullYear() + dat.getMonth() + dat.getDay();
  }

Existe-t-il un meilleur moyen de comparer si la date est la date & heure nouvelle C #?

Et comment puis-je analyser et renvoyer la date au format "aaaa/mm/jj"?

35
DK ALT

Étant donné le résultat avec lequel vous êtes coincé, je ne vois pas de meilleur moyen d'attraper un DateTime de 0 du côté javascript.

Date.parse Devrait fonctionner pour vos besoins en analyse, mais il renvoie le nombre de millisecondes. Vous devez donc envelopper un constructeur Date autour de celui-ci:

var date = new Date(Date.parse(myCSharpString));

Pour la date de retour, vous voulez simplement

date.getFullYear() + "/" + (date.getMonth() + 1) + "/" + (date.getDate() + 1);

(date.getMonth Et date.getDate Sont indexés sur 0 au lieu de 1.)

Violon: http://jsfiddle.net/GyC3t/

[~ # ~] modifier [~ # ~] Merci à JoeB, laissez-moi faire une correction. La fonction date.getMonth() est indexée sur 0, mais la fonction date.getDate() est indexée sur 1. Le violon "travaillait" avec le +1 car date.getMonth fonctionnait à l'heure locale, qui est antérieure à UTC. Je n'ai pas vérifié correctement la documentation, et j'ai simplement ajouté 1, et cela a fonctionné avec le violon.

Une façon plus appropriée de faire ceci est:

Pour la date de retour, vous voulez simplement

date.getFullYear() + "/" + (date.getMonth() + 1) + "/" + (date.getUTCDate());

(date.getMonth Est indexé sur 0 tandis que date.getDate Est indexé sur 1 mais sensible aux différences de fuseau horaire.)

Violon: http://jsfiddle.net/GyC3t/25/

45
Scott Mermelstein

J'utilise ce qui suit pour passer une date Javascript en C #:

var now = new Date();
var date = (now.getTime() / 86400000) - (now.getTimezoneOffset() / 1440) + 25569;

Donc, si vous obtenez le nombre de millisecondes de C #, cela devrait ressembler à ceci:

var csharpmilliseconds;
var now = new Date();
var date = new Date((csharpmilliseconds + (now.getTimezoneOffset() / 1440) - 25569) * 86400000);
2
Nick Gotch