Eu tenho um seguinte pedaço de JSON:
\/Date(1293034567877)\/
que é o resultado deste código .NET:
var obj = DateTime.Now;
var serializer = new System.Web.Script.Serialization.JavaScriptSerializer();
serializer.Serialize(obj).Dump();
Agora, o problema que estou enfrentando é como criar um objeto Date a partir disso em JavaScript. Tudo o que consegui encontrar foi uma solução incrível de regex (muitos contendo bugs).
É difícil acreditar que não existe uma solução elegante, pois tudo isso está em JavaScrip, quero dizer, o código JavaScript tentando ler JSON (JavaScript Object Notation) que deveria ser um código JavaScript e, neste momento, não é porque o JavaScript não pode faça um bom trabalho aqui.
Também vi algumas soluções de avaliação que não consegui fazer funcionar (além de serem apontadas como ameaças à segurança).
Não há realmente nenhuma maneira de fazer isso de forma elegante?
Pergunta semelhante sem resposta real:
Como analisar o formato de data JSON ASP.NET com GWT
fonte
new Date()
-lo.Respostas:
Não há representação JSON padrão de datas. Você deve fazer o que @jAndy sugeriu e não serializar um
DateTime
; basta enviar uma string de data RFC 1123ToString("r")
ou um número de época do Unix de segundos, ou qualquer outra coisa que você possa usar no JavaScript para construir umDate
.fonte
A
JSON.parse
função aceita uma função de reviver DateTime opcional. Você pode usar uma função como esta:Então ligue
E suas datas vão sair certas.
fonte
Esta resposta de Roy Tinker aqui :
Como ele diz: A função substr tira a parte "/ Date (", e a função parseInt obtém o inteiro e ignora ") /" no final. O número resultante é passado para o construtor Date.
Outra opção é simplesmente formatar suas informações corretamente no lado do ASP, de modo que o JavaScript possa lê-las facilmente. Considere fazer isso para suas datas:
Que deve retornar um formato como este:
Se você passar isso para um
Date
construtor JavaScript como este:A variável
date
agora contém este valor:Naturalmente, você pode formatar esse
DateTime
objeto em qualquer tipo de string / int que oDate
construtor JS aceite.fonte
se você usar o estilo de data ISO8601 do JavaScript em JSON, você pode usar isso, do MDN
fonte
Você pode converter a data JSON para o formato de data normal em JavaScript.
fonte
O que há de errado com:
Isso retorna para mim "Quarta, 22 de dezembro de 2010 16:16:07 GMT + 0000 (hora padrão GMT)".
Ou você precisa obter o número do json?
fonte
\/Date(1293034567877)\/
. Se fosse normal, ele apenas geraria o tempo de época e você poderia inicializar um objeto Date com isso.Eu sei que este é um tópico muito antigo, mas gostaria de postar isso para ajudar aqueles que esbarraram nisso como eu fiz.
se você não se importa em usar um script de terceiros, pode usar moment, js. Então, você pode usar .format () para formatá-lo para qualquer coisa que desejar.
fonte
As datas são sempre um pesadelo. Respondendo à sua velha pergunta, talvez esta seja a maneira mais elegante:
Com eval, convertemos nossa string em código javascript. Em seguida, removemos o "/", para a função de substituição é uma expressão regular. À medida que começamos com novo, então nossas frases irão executar isto:
Agora, uma coisa que comecei a usar há muito tempo, são valores longos representados em ticks ... por quê? bem, localização e pare de pensar em como a data é configurada em cada servidor ou cada cliente. Na verdade, eu também o uso em bancos de dados.
Talvez seja muito tarde para esta resposta, mas pode ajudar qualquer um aqui.
fonte
O AngularJS também não conseguiu analisar a
/Date(xxxxxxxxxxxxx)/
string de data JSON .NET .Eu resolvi esse problema formatando a data para sua representação de string ISO 8601 em vez de despejar o
Date
objeto diretamente ...Aqui está um exemplo de código ASP.NET MVC.
Tentei,
RFC 1123
mas não funcionou. O Angular trata isso como string em vez de Data.fonte
Eu não usei .Net para coisas assim. Se você conseguiu imprimir algo como o seguinte, ele deve funcionar.
Observe, a menos que você esteja analisando essa string JSON por algum outro meio ou apenas espere que os usuários tenham navegadores modernos com um analisador JSON integrado, você precisa usar uma estrutura JS ou JSON2 para analisar a string JSON gerada pelo servidor em um JSON real objeto.
Wiki Link
Link para arquivo JSON2
Exemplo ao Vivo
fonte
A resposta a esta pergunta é: use o nuget para obter JSON.NET e, em seguida, use isto dentro do seu
JsonResult
método:dentro da sua visualização, faça isso em
javascript
:Se for uma chamada ajax:
Depois de
JSON.parse
ser chamado, você pode colocar a data JSON em umanew Date
instância porqueJsonConvert
cria uma instância de hora ISO adequadafonte
fonte
Como Callum mencionou, para mim, a melhor maneira é mudar o método Controller para string em vez de JsonResult ".
A partir do método ajax, você pode fazer algo assim
fonte
usando a função eval funciona apenas tem que remover a barra na frente e atrás.
rende Qui, 01 de janeiro de 1970 00:00:00 GMT-0700 (Horário Padrão das Montanhas dos EUA)
fonte
Eu tive um problema com a API externa fornecendo datas neste formato, algumas vezes até com informações de diferença UTC como
/Date(123232313131+1000)/
. Consegui transformá-lo em umDate
objeto js com o seguinte códigofonte
fonte
// Use esta função
fonte