2010-03-08 13 views
73

Da un'altra risposta su StackOverflow è una conversione dalla data Javascript per DateTime .net:DateTime a JavaScript data

long msSinceEpoch = 1260402952906; // Value from Date.getTime() in JavaScript 
return new DateTime(1970, 1, 1) + new TimeSpan(msSinceEpoch * 10000); 

Ma come fare il contrario? DateTime to Javascript Date?

Grazie,

AJ

+0

In domande di questo tipo che sono, ovviamente ajax correlati, è necessario specificare dove si sta facendo la conversione, e considerando che non esiste uno standard per la data serializzazione in JSON e che è possibile che si si occupano di MS Data munging ad es/Data (02020202)/assicuratevi di rendere chiaro anche questo. buona fortuna –

+0

Dovresti collegare la risposta a cui ti stai riferendo – cdmckay

risposta

94

Prova:

return DateTime.Now.Subtract(new DateTime(1970, 1,1)).TotalMilliseconds 

Edit: vero UTC è meglio, ma poi abbiamo bisogno di essere coerenti

return DateTime.UtcNow 
       .Subtract(new DateTime(1970,1,1,0,0,0,DateTimeKind.Utc)) 
       .TotalMilliseconds; 

Anche se, su ripensamenti non importa, finché bot Le date sono nello stesso fuso orario.

+5

Potresti voler utilizzare DateTime.UtcNow invece di DateTime.Ora –

+2

Per quanto riguarda i tuoi pensieri secondari: importa durante la transizione da o all'ora legale (devo sempre pensa davvero difficile ricordare quale :) Durante la transizione, l'ora delle 2:00 alle 3:00 viene ripetuta due volte. Ciò significa che durante un'ora la data di javascript sarà disattivata di un'ora. UTC non ha DLS quindi non ha questo problema. –

+0

Ho lo stesso codice qui ma fa la differenza 5:30 in data javascript mentre C# date funziona bene. –

8

Questo dovrebbe fare il trucco:

date.Subtract(new DateTime(1970, 1,1)).TotalMilliseconds 
36

JavaScript Data di costruzione accetta numero di millisecondi trascorsi epoca Unix (1 gennaio 1970 00:00:00 UTC). Ecco C# metodo di estensione che converte oggetto .Net DateTime ad oggi JavaScript: Uso

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

JavaScript:

var dt = new Date(<%= DateTime.Today.ToJavaScriptMilliseconds() %>); 
alert(dt); 
+0

proprio quello di cui avevo bisogno – spankmaster79

0
<input type="hidden" id="CDate" value="<%=DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss")%>" /> 

Al fine di convertire la data a data JS (tutti i numeri):

var JSDate = $("#CDate").val(); 
JSDate = Date.parse(JSDate); 
2

So che è un po 'tardi, ma ecco la soluzione che dovevo trovare per gestire le date quando si desidera essere indipendente dal fuso orario. In sostanza si tratta di convertire tutto in UTC.

Da Javascript per server:

inviare date come valori d'epoca con l'offset rimosso fuso orario.

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

Il server riceve 1420,0704 miliardi come data epoca.

Sul lato server, convertire tale valore epoch a un oggetto datetime:

DateTime d = new DateTime(1970, 1, 1, 0, 0, 0).AddMilliseconds(epoch); 

A questo punto la data è solo la data/ora fornita dall'utente in quanto le fornivano. In effetti è UTC.

In senso contrario:

Quando il server estrae i dati dal database, presumibilmente in UTC, ottenere la differenza come un'epoca (facendo in modo che entrambi gli oggetti di data sono o locale o UTC):

long ms = (long)utcDate.Subtract(new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)).TotalMilliseconds; 

o

long ms = (long)localDate.Subtract(new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Local)).TotalMilliseconds; 

Quando javascript riceve questo valore, crea un nuovo oggetto data. Tuttavia, questo oggetto data sta per essere assunto ora locale, quindi è necessario per compensare dal fuso orario corrente:

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) 

Per quanto ne so, questo dovrebbe funzionare per qualsiasi fuso orario in cui si è necessario visualizzare le date che sono indipendenti dal fuso orario.

9

Si può provare questo nella vostra azione:

return DateTime.Now.ToString("yyyy-MM-ddTHH:mm:ss"); 

E questo nel vostro successo Ajax:

success: function (resultDateString) { 
    var date = new Date(resultDateString); 
} 

O questo nel vostro Vista: (JavaScript plus C#)

var date = new Date('@DateTime.Now.ToString("yyyy-MM-ddTHH:mm:ss")'); 
12

Con Moment.js usa semplicemente:

var jsDate = moment(netDateTime).toDate(); 

Dove netDateTime è la variabile DateTime serializzata, ad esempio "/Date(1456956000000+0200)/".

1

Questo metodo sta lavorando per me:

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

Se si utilizza MVC con il rasoio

----- 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: creare l'elenco in C# e riempirlo
  • 2: Creare un array in JavaScript
  • 3: Utilizzo di rasoio per iterare l'elenco
  • 4: Usa @: per tornare alla js e @ per passare alla C#
  • 5: Il -1 del mese per correggere il numero del mese in js.

Buona fortuna

Problemi correlati