web-dev-qa-db-fra.com

DateTime à la date javascript

Une autre réponse sur Stackoverflow est une conversion de la date Javascript en .net DateTime:

long msSinceEpoch = 1260402952906; // Value from Date.getTime() in JavaScript
return new DateTime(1970, 1, 1) + new TimeSpan(msSinceEpoch * 10000);

Mais comment faire l'inverse? DateTime to Javascript Date?

86
AJ.

Essayer:

return DateTime.Now.Subtract(new DateTime(1970, 1,1)).TotalMilliseconds

Edit: vrai UTC est mieux, mais alors nous devons être cohérents

return DateTime.UtcNow
               .Subtract(new DateTime(1970,1,1,0,0,0,DateTimeKind.Utc))
               .TotalMilliseconds;

Bien que, à la réflexion, cela n'a pas d'importance, tant que les deux dates sont dans le même fuseau horaire.

105
AxelEckenberger

JavaScript Date constructeur accepte le nombre de millisecondes depuis Unix Epoch (1er janvier 1970 00:00:00 UTC). Voici la méthode d'extension C # qui convertit l'objet .Net DateTime en date JavaScript:

public static class DateTimeJavaScript
{
   private static readonly long DatetimeMinTimeTicks =
      (new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)).Ticks;

   public static long ToJavaScriptMilliseconds(this DateTime dt)
   {
      return (long)((dt.ToUniversalTime().Ticks - DatetimeMinTimeTicks) / 10000);
   }
}

Utilisation de JavaScript:

var dt = new Date(<%= DateTime.Today.ToJavaScriptMilliseconds() %>);
alert(dt);
37
Yair Nevet

Avec Moment.js utilisez simplement:

var jsDate = moment(netDateTime).toDate();

netDateTime est votre variable DateTime sérialisée, quelque chose comme "/Date(1456956000000+0200)/".

22
Marco Lackovic

Vous pouvez essayer ceci dans votre action:

return DateTime.Now.ToString("yyyy-MM-ddTHH:mm:ss");

Et ceci dans votre succès en Ajax:

success: function (resultDateString) {
    var date = new Date(resultDateString);
}

Ou ceci dans votre vue: (Javascript plus C #)

var date = new Date('@DateTime.Now.ToString("yyyy-MM-ddTHH:mm:ss")');
16
Renan Cerqueira

Cela devrait faire l'affaire:

date.Subtract(new DateTime(1970, 1,1)).TotalMilliseconds
9
munissor

Je sais que c'est un peu tard, mais voici la solution que je devais trouver pour gérer les dates lorsque vous voulez être indépendant du fuseau horaire. Il s’agit essentiellement de tout convertir en UTC.

Du Javascript au serveur

Envoyez les dates en tant que valeurs d'époque avec le décalage du fuseau horaire supprimé.

var d = new Date(2015,0,1) // Jan 1, 2015
// Ajax Request to server ...
$.ajax({
  url: '/target',
  params: { date: d.getTime() - (d.getTimezoneOffset() * 60 * 1000) }
});

Le serveur reçoit alors 1420070400000 comme date Epoch.

Sur le côté serveur, convertissez cette valeur Epoch en objet datetime:

DateTime d = new DateTime(1970, 1, 1, 0, 0, 0).AddMilliseconds(Epoch);

À ce stade, la date est simplement la date/heure fournie par l'utilisateur telle qu'elle l'a fournie. Effectivement c'est UTC.

Aller dans l'autre sens :

Lorsque le serveur extrait des données de la base de données, probablement au format UTC, obtenez la différence sous la forme d'une époque (en vous assurant que les deux objets de date sont locaux ou au format UTC):

long ms = (long)utcDate.Subtract(new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)).TotalMilliseconds;

ou

long ms = (long)localDate.Subtract(new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Local)).TotalMilliseconds;

Lorsque javascript reçoit cette valeur, créez un nouvel objet de date. Cependant, cet objet de date sera supposé être l'heure locale, vous devez donc le décaler par le fuseau horaire actuel:

var epochValue = 1420070400000 // value pulled from server.
var utcDateVal = new Date(epochValue);
var actualDate = new Date(utcDateVal.getTime() + (utcDateVal.getTimezoneOffset() * 60 * 1000))

console.log(utcDateVal); // Wed Dec 31 2014 19:00:00 GMT-0500 (Eastern Standard Time)
console.log(actualDate); // Thu Jan 01 2015 00:00:00 GMT-0500 (Eastern Standard Time)

Autant que je sache, cela devrait fonctionner pour tous les fuseaux horaires dans lesquels vous devez afficher des dates indépendantes du fuseau horaire.

4
Code Monkey

Cette méthode fonctionne pour moi:

   public sCdateToJsDate(cSDate: any): Date {
        // cSDate is '2017-01-24T14:14:55.807'
        var datestr = cSDate.toString();
        var dateAr = datestr.split('-');
        var year = parseInt(dateAr[0]);
        var month = parseInt(dateAr[1])-1;
        var day = parseInt(dateAr[2].substring(0, dateAr[2].indexOf("T")));
        var timestring = dateAr[2].substring(dateAr[2].indexOf("T") + 1);
        var timeAr = timestring.split(":");
        var hour = parseInt(timeAr[0]);
        var min = parseInt(timeAr[1]);
        var sek = parseInt(timeAr[2]);
        var date = new Date(year, month, day, hour, min, sek, 0);
        return date;
    }
2
alexey

Si vous utilisez MVC avec rasoir 

----- Rasoir/C #

var dt1 = DateTime.Now.AddDays(14).Date;
    var dt2 = DateTime.Now.AddDays(18).Date;

    var lstDateTime = new List<DateTime>();
    lstDateTime.Add(dt1);
    lstDateTime.Add(dt2);

--- Javascript

$(function() {

            var arr = []; //javascript array

            @foreach (var item in lstDateTime)
             {
                @:arr1.Push(new Date(@item.Year, @(item.Month - 1), @item.Day));
             }
  • 1: créer la liste en C # et la remplir
  • 2: Créer un tableau en javascript
  • 3: Utilisez le rasoir pour parcourir la liste
  • 4: Utilisez @: pour revenir à js et @ pour passer à C #
  • 5: Le -1 du mois pour corriger le nombre de mois en js.

Bonne chance

1
Dinand
<input type="hidden" id="CDate" value="<%=DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss")%>" />

Pour convertir la date en date JS (tous les nombres):

var JSDate = $("#CDate").val();
JSDate = Date.parse(JSDate);
0
syaakobi

Une autre réponse tardive, mais cela manque ici. Si vous souhaitez gérer la conversion de /Date(1425408717000)/ sérialisé __ en javascript, vous pouvez simplement appeler:

var cSharpDate = "/Date(1425408717000)/"
var jsDate = new Date(parseInt(cSharpDate.replace(/[^0-9 +]/g, '')));

Source: amirsahib

0
Kajbo