2010-03-08 28 views
73

De otra respuesta en Stackoverflow es una conversión de fecha Javascript para DateTime .net:DateTime a javascript fecha

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

Pero, ¿cómo hacer a la inversa? DateTime a la fecha de Javascript?

Gracias,

AJ

+0

En este tipo de preguntas que son, obviamente, ajax relacionados, se debe especificar el lugar en que está haciendo la conversión, y teniendo en cuenta que no existe un estándar para la fecha de la serialización en JSON y que es posible que se están tratando con MS Date munging, por ejemplo,/Date (02020202)/asegúrese de dejar eso en claro también. buena suerte –

+0

Debe vincular la respuesta que se refiere a – cdmckay

Respuesta

94

Probar:

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

Editar: cierto UTC es mejor, pero entonces tenemos que ser coherentes

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

Aunque, en segundo pensamiento, no importa, siempre y cuando bot h las fechas están en la misma zona horaria.

+5

Es posible que desee utilizar DateTime.UtcNow en lugar de DateTime.Now –

+2

En cuanto a sus dudas: sí importa durante la transición hacia o desde el horario de verano (siempre tengo que pensar realmente difícil recordar cuál :). Durante la transición, la hora de 2:00 a 3:00 se repite dos veces. Esto significa que durante una hora, la fecha de javascript estará desactivada en una hora. UTC no tiene DLS, por lo que no tiene ese problema. –

+0

Tengo el mismo código aquí pero hace una diferencia de 5:30 en la fecha de javascript, mientras que la fecha C# funciona bien. –

8

Esto debe hacer el truco:

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

JavaScript Fecha constructor acepta el número de milisegundos desde la época Unix (1 enero 1970 00:00:00 UTC). Aquí es C# método de extensión que convierte objeto .NET DateTime hasta la fecha 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); 
    } 
} 

JavaScript Uso:

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

justo lo que necesitaba – spankmaster79

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

Con el fin de convertir la fecha hasta la fecha JS (todos los números):

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

Sé que esto es un poco tarde, pero esta es la solución que tuve que idear para manejar las fechas cuando usted desea ser zona horaria independiente. Esencialmente implica convertir todo a UTC.

De Javascript para Servidor:

Enviar cabo fechas como valores de época con la zona horaria de desplazamiento eliminado.

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

continuación, el servidor recieves 1420070400000 como la época fecha.

En el lado del servidor, convertir ese valor de la época a un objeto de fecha y hora:

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

En este punto, la fecha es la fecha/hora proporcionada por el usuario, ya que siempre la misma. Efectivamente es UTC.

En sentido:

Cuando el servidor extrae datos de la base de datos, presumiblemente en UTC, obtener la diferencia como una época (asegurándose de que ambos objetos de la fecha son ya sea local 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; 

Cuando javascript recibe este valor, cree un nuevo objeto de fecha. Sin embargo, este objeto fecha va a ser asumida hora local, por lo que necesita para compensar por la zona horaria actual:

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) 

Por lo que yo sé, esto debería funcionar para cualquier zona horaria donde se necesita mostrar las fechas que son independientes de la zona horaria.

9

Usted puede intentar esto en su acción:

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

Y esto, a su éxito Ajax:

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

O esto en su opinión: (Javascript Plus C#)

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

Con Moment.js simplemente use:

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

Donde netDateTime es su variable DateTime serializada, algo así como "/Date(1456956000000+0200)/".

1

Este método está funcionando para mí:

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

Si utiliza MVC con la maquinilla de afeitar

----- 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: crear la lista en C# y llenarlo
  • 2: Crear una matriz en Javascript
  • 3: Maquinilla de afeitar utiliza para iterar la lista
  • 4: Uso @: para volver a js y @ para cambiar a C#
  • 5: El -1 en el mes para corregir el número de mes en js.

Buena suerte

Cuestiones relacionadas