Comment convertir Javascript datetime en C# datetime?
j'ai lu que si vous voulez convertir des dates JavaScript en C # dates vous devez utiliser getTime()
et ensuite ajouter ce résultat à un C# DateTime
.
supposons que J'ai ce temps JavaScript:
Date {Tue Jul 12 2011 16:00:00 GMT-0700 (Pacific Daylight Time)}
Il rend à l' 1310522400000
millisecondes
var a = new DateTime(1970, 01, 01).AddMilliseconds(1310522400000);
// result
7/13/2011 2:00:00 AM
Donc c'est faux. Je ne suis pas sûr de ce que je dois faire.
15 réponses
créez D'abord une chaîne de caractères dans votre format requis en utilisant les fonctions suivantes en JavaScript
var date = new Date();
var day = date.getDate(); // yields date
var month = date.getMonth() + 1; // yields month (add one as '.getMonth()' is zero indexed)
var year = date.getFullYear(); // yields year
var hour = date.getHours(); // yields hours
var minute = date.getMinutes(); // yields minutes
var second = date.getSeconds(); // yields seconds
// After this construct a string with the above results as below
var time = day + "/" + month + "/" + year + " " + hour + ':' + minute + ':' + second;
passez cette chaîne à la fonction codebehind et acceptez-la comme paramètre de chaîne.Utilisez le DateTime.ParseExact()
dans le codebehind pour convertir cette chaîne en DateTime
ainsi,
DateTime.ParseExact(YourString, "dd/MM/yyyy HH:mm:ss", CultureInfo.InvariantCulture);
J'espère que cela vous aidera...
Vous aviez presque raison, il suffit d'un petit correctif pour être fait:
var a = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)
.AddMilliseconds(1310522400000)
.ToLocalTime();
Vous pouvez utiliser le la méthode toJSON() méthode JavaScript, elle convertit un DateTime JavaScript en ce que C# peut reconnaître comme un DateTime.
le code JavaScript ressemble à ceci
var date = new Date();
date.toJSON(); // this is the JavaScript date as a c# DateTime
DateTime.Parse
est un bien meilleur pari. Js dates et c # dates ne partent pas de la même racine.
Exemple:
DateTime dt = DateTime.ParseExact("Tue Jul 12 2011 16:00:00 GMT-0700",
"ddd MMM d yyyy HH:mm:ss tt zzz",
CultureInfo.InvariantCulture);
puisque je suis dans un fuseau horaire différent, Mon JavaScript et C# finissent par avoir 2 heures de différence entre la même date (même si j'ai essayé d'envoyer la date à un service Web comme date [non converti en string/un autre objet]).
j'ai essayé D'utiliser le getTime() en JavaScript et d'ajouter les millisecondes à une date C# (à partir du 01/01/1970) mais j'ai toujours fini avec deux heures d'avance sur ma date C#.
d'accorder que j'aurais la même Date et la même heure dans les deux camps I fini par faire ceci:
en JavaScript j'ai utilisé la fonction UTC:
var jsDate = Date.UTC(year,month,day,hours,minutes,seconds,millisec);
et en C# pour obtenir la date correcte j'ai fait ceci:
var date = new DateTime(1970, 1, 1, 0, 0, 0, 0).AddMilliseconds(jsDate);
j'Espère que ça aide quelqu'un.
Si vous utilisez actuellement.js dans votre candidature.
var x= moment (nouvelle Date ()).format ('JJ / MM/ aaaa hh: mm: ss')
Pass x
pour le code-behind de la fonction et à l'accepter comme un paramètre de chaîne. Utilisez le DateTime.ParseExact()
en c# pour convertir cette chaîne de type DateTime comme suit,
DateTime.ParseExact(YourString, "dd/MM/yyyy HH:mm:ss", CultureInfo.InvariantCulture);
je pense que vous pouvez utiliser le TimeZoneInfo....pour convertir le type datetime....
static void Main(string[] args)
{
long time = 1310522400000;
DateTime dt_1970 = new DateTime(1970, 1, 1);
long tricks_1970 = dt_1970.Ticks;
long time_tricks = tricks_1970 + time * 10000;
DateTime dt = new DateTime(time_tricks);
Console.WriteLine(dt.ToShortDateString()); // result : 7/13
dt = TimeZoneInfo.ConvertTimeToUtc(dt);
Console.WriteLine(dt.ToShortDateString()); // result : 7/12
Console.Read();
}
si vous êtes dans le fuseau horaire du Pacifique des États-Unis, alors votre époque est à 16 h le 31 décembre 1969. Vous avez ajouté les millisecondes depuis l'époque à
new DateTime(1970, 01, 01)
qui, n'ayant pas de fuseau horaire, a été interprété comme étant en fuseau horaire.
il n'y a rien de vraiment mal à penser des instants dans le temps en millisecondes depuis l'époque mais comprendre que l'époque n'est que 1970-01-01T00:00:00Z.
Vous ne pouvez pas penser à des instants les temps, lorsqu'ils sont représentés comme des dates, sans fuseaux horaires.
si vous voulez envoyer des dates à C# DE JS c'est en fait assez simple - si envoyer des dates UTC est acceptable.
var date = new Date("Tue Jul 12 2011 16:00:00 GMT-0700");
var dateStrToSendToServer = date.toISOString();
... Envoyer à C # side ...
var success = DateTimeOffset.TryParse(jsISOStr, CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal, out var result);
C# DateTime
comprend déjà les formats de date ISO et va l'analyser très bien.
formater à partir de C# JS suffit d'utiliser DateTime.UtcNow.ToString("o")
.
personnellement, je ne suis jamais à l'aise de compter sur les maths et la logique entre les différents environnements pour obtenir les millisecondes / tiques pour montrer la même date exacte et le temps qu'un utilisateur peut voir sur le client (en particulier lorsque cela est important). Je ferais la même chose lors du transfert de monnaie aussi bien (utilisez des chaînes de caractères à la place pour être sûr, ou séparer des dollars et des cents entre deux entiers différents). Envoyer la date/heure comme valeurs séparées serait juste un bon (voir accepté de répondre à).
JavaScript (HTML5)
function TimeHelper_GetDateAndFormat() {
var date = new Date();
return MakeValid(date.getDate()).concat(
HtmlConstants_FRONT_SLASH,
MakeValid(date.getMonth() + 1),
HtmlConstants_FRONT_SLASH,
MakeValid(date.getFullYear()),
HtmlConstants_SPACE,
MakeValid(date.getHours()),
HtmlConstants_COLON,
MakeValid(date.getMinutes()),
HtmlConstants_COLON,
MakeValid(date.getSeconds()));
}
function MakeValid(timeRegion) {
return timeRegion !== undefined && timeRegion < 10 ? ("0" + timeRegion).toString() : timeRegion.toString();
}
C#
private const string DATE_FORMAT = "dd/MM/yyyy HH:mm:ss";
public DateTime? JavaScriptDateParse(string dateString)
{
DateTime date;
return DateTime.TryParseExact(dateString, DATE_FORMAT, CultureInfo.InvariantCulture, DateTimeStyles.None, out date) ? date : null;
}
il y a eu quelques erreurs dans la réponse de harun qui sont corrigées ci-dessous:
1) date d'utilisation de harun getDay()
ce qui est incorrect devrait être getDate()
2)getMonth()
donne un mois de moins que le mois réel, donc nous devrions l'augmenter de 1 comme indiqué ci-dessous
var date = new Date();
var day = date.getDate(); // yields
var month = date.getMonth() + 1; // yields month
var year = date.getFullYear(); // yields year
var hour = date.getHours(); // yields hours
var minute = date.getMinutes(); // yields minutes
var second = date.getSeconds(); // yields seconds
// After this construct a string with the above results as below
var time = day + "/" + month + "/" + year + " " + hour + ':' + minute + ':' + second;
passer cette chaîne à la fonction codebehind et l'accepter comme paramètre string.Utilisez le DateTime.ParseExact()
dans le codebehind pour convertir cette chaîne en DateTime
ainsi,
DateTime.ParseExact(YourString, "dd/MM/yyyy HH:mm:ss", CultureInfo.InvariantCulture);
ce A fonctionné pour moi! Espérons que cela vous aider trop.
JS:
function createDateObj(date) {
var day = date.getDate(); // yields
var month = date.getMonth(); // yields month
var year = date.getFullYear(); // yields year
var hour = date.getHours(); // yields hours
var minute = date.getMinutes(); // yields minutes
var second = date.getSeconds(); // yields seconds
var millisec = date.getMilliseconds();
var jsDate = Date.UTC(year, month, day, hour, minute, second, millisec);
return jsDate;
}
JS:
var oRequirementEval = new Object();
var date = new Date($("#dueDate").val());
CS:
requirementEvaluations.DeadLine = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)
.AddMilliseconds(Convert.ToDouble( arrayUpdateRequirementEvaluationData["DeadLine"]))
.ToLocalTime();
UPDATE: De .NET Version 4.6 utiliser le Fromunixtimemillisecondes méthode de l' DateTimeOffset structure de la place:
DateTimeOffset.FromUnixTimeMilliseconds(1310522400000).DateTime
vous pouvez aussi envoyer Js time à C# Avec Moment.Bibliothèque js :
JavaScript:var dateString = moment(new Date()).format('LLLL')
C#:DateTime.Parse(dateString);
j'ai pu résoudre le problème en utilisant la solution indiquée par @Garth.
date.toJSON()