2016-02-05 2 views
0

У меня есть следующее поле валидатор объект:магазин `новый Date()` в объект JSON

{ type:'date', 'min':new Date() } 

Я надеялся, что я мог бы хранить new Date() как выражение в формате JSON, и она будет выполнена, когда он разобран

+0

Вы можете 't хранить выражение в JSON и ожидать, что он будет выполнен, когда он будет разобран. – pawel

+1

Трудно сказать без контекста. Это формат, требуемый какой-либо внешней библиотекой? Вы создаете JSON на стороне сервера? Woulld можно refacotr валидатор, чтобы он мог принять объект типа '{type: 'date', allowPast: false}'? – pawel

+0

, который мог бы работать, спасибо @pawel – stackoverfloweth

ответ

2

сохранить метку времени:

{ type:'date', 'min':(new Date()).getTime() } 

после прочтения его обратно:

var result = JSON.parse('{ "type":"date", "min":1234567 }'); 
result.date = new Date(result.min); 
+0

потому что это проверка поля. Я надеялся, что смогу сделать динамику 'мин'. Таким образом, когда страница загружается и sql отправляет этот объект проверки, он обрабатывается как дата, а не статическая дата. Имеет ли это смысл? – stackoverfloweth

+0

нет смысла совсем. Json - это данные. Вы сохраняете его с некоторой ценностью, вы его возвращаете. «dynamic» - это код: вы выполняете функцию, и когда вы вызываете ее, она возвращает дату в этот момент. для этого вам не нужно иметь мин в json вообще – Gavriel

+0

ладно спасибо за вашу помощь – stackoverfloweth

0

Дата объекта, на самом деле имеет метод toJSON, который может вам пригодиться. Однако я предлагаю использовать getTime, поскольку он возвращает метку времени, которая обычно более гибкая.

1

JSON не поддерживает тип данных Date (он поддерживает только строки число, объекта, массива, истинного, ложного и нуля). Вам нужно преобразовать его в строку.

Например, время ISO:

var json = JSON.stringify({ type:'date', 'min':new Date().toISOString() }); 
 
document.body.appendChild(document.createTextNode(json));

2

Вы не можете сохранить весь объект Date в строку JSON. Но вы можете попытаться сохранить текст, представляющий его:

Как строка:

{ type:'date', 'min':(new Date()).toString() } 

В качестве временной метки:

{ type:'date', 'min':(new Date()).getTime() } 

В качестве строки ISO:

{ type:'date', 'min':(new Date()).toJSON() } 
Смежные вопросы