113 votes

DateTime en date javascript

D'après une autre réponse sur Stackoverflow, il s'agit d'une conversion de la date Javascript en DateTime .net :

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 vers Date Javascript ?

0 votes

Dans les questions de ce type qui sont manifestement liées à ajax, vous devez préciser où vous effectuez la conversion, et compte tenu du fait qu'il n'existe pas de norme pour la sérialisation de la date dans JSON et qu'il est possible que vous ayez affaire à MS Date munging, par exemple /Date(02020202)/, assurez-vous de le préciser également. Bonne chance.

2 votes

Vous devriez mettre en lien la réponse à laquelle vous faites référence.

6voto

Kajbo Points 415

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

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

Source : amirsahib

4voto

Code Monkey Points 121

Je sais que c'est un peu tard, mais voici la solution que j'ai dû trouver pour gérer les dates lorsque l'on veut être indépendant du fuseau horaire. Il s'agit essentiellement de tout convertir en UTC.

Du Javascript au serveur :

Envoyer 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 d'époque.

Du côté du serveur, convertissez cette valeur d'époque en un objet de type 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'il l'a fournie. Il s'agit en fait de l'heure UTC.

Aller dans l'autre sens :

Lorsque le serveur extrait des données de la base de données, vraisemblablement en UTC, il récupère la différence en tant qu'époque (en s'assurant que les deux objets date sont soit locaux soit 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, il crée un nouvel objet date. Cependant, cet objet date sera supposé être à l'heure locale, donc vous devez le décaler du 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)

Pour autant que je sache, cela devrait fonctionner pour tout fuseau horaire où vous avez besoin d'afficher des dates indépendantes du fuseau horaire.

2voto

alexey Points 342

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;
    }

1voto

Dinand Points 196

Si vous utilisez MVC avec razor

-----Razor/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 : Utiliser razor pour itérer la liste
  • 4 : Utilisez @ : pour revenir à js et @ pour passer à C#.
  • 5 : Le -1 du mois pour corriger le numéro du mois en js.

Bonne chance

0voto

Sandeep Kumar Points 175

Je l'ai fait en utilisant le format date-heure.

C# vers JS

public static class DateTimeExtension
{
    public static string ToJsString(this DateTime @this)
    {
        return @this.ToString("ddd, dd MMM yyyy HH:mm:ss") + " GMT";
    }
}

JS vers C#

 public  DateTime ParseJSDate(this string jsDate)
 {
     return DateTime.ParseExact(jsDate, "ddd, dd MMM yyyy HH:mm:ss GMT", CultureInfo.InvariantCulture);
 }

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X