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?
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.
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);
Avec Moment.js utilisez simplement:
var jsDate = moment(netDateTime).toDate();
Où netDateTime
est votre variable DateTime sérialisée, quelque chose comme "/Date(1456956000000+0200)/"
.
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")');
Cela devrait faire l'affaire:
date.Subtract(new DateTime(1970, 1,1)).TotalMilliseconds
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.
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;
}
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));
}
Bonne chance
<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);
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