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.

31
demandé sur Moob 2011-07-15 08:30:58

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...

20
répondu Harun 2017-03-21 03:13:51

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();
20
répondu vasiliy 2013-12-10 18:48:55

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
13
répondu Garth 2018-04-30 02:44:01

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);
4
répondu Mrchief 2018-02-05 21:15:35

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.

3
répondu Rafael Merlin 2014-02-12 12:00:22

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);
3
répondu raga 2017-06-12 01:35:32

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();
    }
1
répondu shenhengbin 2011-07-15 04:56:10

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.

1
répondu Ray Toal 2011-07-15 05:02:38

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 à).

1
répondu James Wilkins 2018-02-06 09:03:32

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;
}
0
répondu MyKuLLSKI 2012-09-03 01:08:30

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.

0
répondu Rohit Arora 2015-09-08 06:26:06

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();
0
répondu Jaydeep Shil 2015-10-28 05:42:13

UPDATE: De .NET Version 4.6 utiliser le Fromunixtimemillisecondes méthode de l' DateTimeOffset structure de la place:

DateTimeOffset.FromUnixTimeMilliseconds(1310522400000).DateTime
0
répondu Andriy Tolstoy 2017-11-09 12:43:55

vous pouvez aussi envoyer Js time à C# Avec Moment.Bibliothèque js :

JavaScript:var dateString = moment(new Date()).format('LLLL')

C#:DateTime.Parse(dateString);

0
répondu AminSojoudi 2018-02-28 09:27:46

j'ai pu résoudre le problème en utilisant la solution indiquée par @Garth.

date.toJSON()
-1
répondu Juan Martí 2018-06-01 16:28:45