70 votes

Passer un datetime de javascript à c# (Controller)

Comment passer une date et une heure (j'en ai besoin à la seconde près) à c# en utilisant jquery et mvc3. Voici ce que j'ai

var date = new Date();    
$.ajax(
   {
       type: "POST",
       url: "/Group/Refresh",
       contentType: "application/json; charset=utf-8",
       data: "{ 'MyDate': " + date.toUTCString() + " }",
       success: function (result) {
           //do something
       },
       error: function (req, status, error) {
           //error                        
       }
   });

Je n'arrive pas à savoir dans quel format la date doit être, pour que le C# la comprenne.

89voto

fomaa Points 26

Essayez d'utiliser toISOString(). Elle renvoie une chaîne au format ISO8601.

Méthode GET

javascript

$.get('/example/doGet?date=' + new Date().toISOString(), function (result) {
    console.log(result);
});

c#

[HttpGet]
public JsonResult DoGet(DateTime date)
{
    return Json(date.ToString(), JsonRequestBehavior.AllowGet);
}

Méthode POST

javascript

$.post('/example/do', { date: date.toISOString() }, function (result) {
    console.log(result);
});

c#

[HttpPost]
public JsonResult Do(DateTime date)
{
     return Json(date.ToString());
}

2 votes

ToISOString() fait plus que ce qui est mentionné ici. Je convertit la date JS en une date utc du 4 février 2018 elle se convertit en 3 février 2018 2300Z et du côté serveur j'obtiens alors : 03/02/2018 23:00:00 donc je dois faire : myDate.ToLocalTime() (en supposant que la culture actuelle est DE) alors j'obtiens 04.02.2018.

0 votes

Je corrige : "...côté serveur j'obtiens alors : 03/02/2018 22:00:00"

35voto

Darin Dimitrov Points 528142

Le format suivant devrait fonctionner :

$.ajax({
    type: "POST",
    url: "@Url.Action("refresh", "group")",
    contentType: "application/json; charset=utf-8",
    data: JSON.stringify({ 
        myDate: '2011-04-02 17:15:45'
    }),
    success: function (result) {
        //do something
    },
    error: function (req, status, error) {
        //error                        
    }
});

0 votes

Cela supposerait que l'heure du navigateur/client et l'heure du serveur soient synchronisées, ce qui n'est pas nécessairement le cas.

2 votes

@amonteiro, bien sûr, vous pouvez toujours convertir les données en temps universel avant de les envoyer afin de pouvoir les reconvertir en temps local sur le serveur.

0 votes

Cela a bien fonctionné. Mais comment envoyer une date qui n'est PAS le 2 avril, peut-être avec une variable Date ?

7voto

Kamran Points 190

Il existe un toJSON() en javascript renvoie une représentation en chaîne de l'objet Date. toJSON() est IE8+ et toISOString() est IE9+. Les deux résultats en YYYY-MM-DDTHH:mm:ss.sssZ format.

var date = new Date();    
    $.ajax(
       {
           type: "POST",
           url: "/Group/Refresh",
           contentType: "application/json; charset=utf-8",
           data: "{ 'MyDate': " + date.toJSON() + " }",
           success: function (result) {
               //do something
           },
           error: function (req, status, error) {
               //error                        
           }
       });

0voto

geek Points 7054

Essayez ceci

var date = new Date();    
$.ajax(
   {
       type: "POST",
       url: "/Group/Refresh",
       contentType: "application/json; charset=utf-8",
       data: "{ 'MyDate': " + date.getTimezoneOffset() + " }",
       success: function (result) {
           //do something
       },
       error: function (req, status, error) {
           //error                        
       }
   });

En C#

DateTime.Now.ToUniversalTime().AddMinutes(double.Parse(MyDate)).ToString();

0 votes

Ainsi, DateTime.Now.ToUniversalTime().AddMinutes(double.Parse(MyDate)).ToString() ; me donnerait l'heure universelle sur le serveur, n'est-ce pas ? Si je fais .ToLocalTime(), cela convertira-t-il l'heure du serveur ?

0 votes

En fait, maintenant que j'y pense, cela ne me donnerait que le décalage et non l'heure réelle passée. Je devrais donc passer deux variables - le décalage comme vous l'avez indiqué, et la date comme Darin l'a indiqué.

0voto

Nanu Points 578

Update: Veuillez consulter la réponse marquée comme une meilleure solution pour mettre en œuvre ceci. La solution suivante n'est plus nécessaire.

Conversion de la date json au format "mm/dd/yyyy HH:MM:ss".
dateFormat est un fichier jasondate format.js se trouvant à blog.stevenlevithan.com

var _meetStartTime = dateFormat(now, "mm/dd/yyyy HH:MM:ss");

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