Получение даты и / или проверка ее в объекте JSON? - PullRequest
2 голосов
/ 25 ноября 2010

У меня есть объект JSON, который может (есть) хранить Date (и / или любой другой объект JS), но я не уверен, как его получить, как только он будет в нем.Например, у меня есть этот пример кода, но он не работает:

for(var key in value){
    if(value.hasOwnProperty(key)){
        if(typeof value[key] == 'object'){
            if(value[key].Date){
                console.log('this is a date')
            }
            else{
                console.log('not a date');
            }
        }
    }
}

Однако, он просто возвращает not a date.Если я проверяю объект JSON с помощью Firebug или консоли разработчика в WebKit, я вижу __proto__: Date внутри соответствующего элемента JSON ... так, как мне его получить или проверить?

- РЕДАКТИРОВАТЬ-

Вот что я вижу в отладчике:

Object
->isADate: Fri Nov 26 2010 20:30:57 GMT-0800 (Pacific Standard Time)
--->__proto__: Date
->notADate: "some string"
--->__proto__: Object

А вот JSON, который я создаю:

var dateStorage = new storageLocker('date-test');
dateStorage.save({'isADate':new Date(),'notADate':'some string'});

Вот код этой частимоего сценария (http://github.com/oscargodson/storagelocker)

storageLocker.prototype.save = function(value){
var json = JSON.parse(localStorage.getItem(this.catalog));
if(json == null){json = {};}
for(var key in value){
    if(value.hasOwnProperty(key)){
        json[key] = value[key];
        console.log(value[key].Date);
        if(typeof value[key] == 'object'){
            if(value[key].Date){
                console.log('this is a date')
            }
            else{
                console.log('not a date');
            }
        }
    }
}
localStorage.setItem(this.catalog,JSON.stringify(json));
return this;
}

Большое спасибо! Надеюсь, это поможет больше!

Ответы [ 2 ]

2 голосов
/ 25 ноября 2010

Вы хотите посмотреть на это: Как узнать, является ли объект датой или нет с помощью JavaScript

В основном "самый безопасный" - не 100% отказоустойчивый, но с вами все должно быть в порядке- обнаружение функции.

Однако убедитесь, что ваша запись JSON действительно является объектом даты, а не строкой, в этом случае это не сработает, и вам нужно будет использовать new Date()или Date.parse(), чтобы сделать его объектом даты.

РЕДАКТИРОВАТЬ: После ваших 2 комментариев:

JSON не позволяет хранить объекты в формате даты.Итак, здесь уже есть расхождение.Либо вы на самом деле не имеете дело с объектами JSON, либо не имеете с ними дела такими, какими они должны быть.

На этой странице приведена официальная документация по использованию JSON в JavaScript дляинформация о том, как использовать параметр reviver в JSON.parse, потому что дата должна быть сохранена в виде строки, а затем «восстановлена» в объект Date.

Кроме того, этот тип возвращаемого объекта не обязательно означает, чтовы не имеете дело со строкой, например:

typeof new String("test") // object

Теперь, предполагая, что у вас действительно есть объект Date на данный момент, я не вижу, как в любом случае будет работать тестирование на value[key].Date.Попробуйте это в своей консоли отладки, так как у вас есть FireBug:

var t = new Date();
alert(t.Date)                           // undefined
alert(t.getMonth)                       // code of the function, so not undefined
alert(typeof t.getMonth != 'undefined') // true

Так что использование комбинации тестов для getMonth, getDay и других сделало бы свое дело.

0 голосов
/ 08 апреля 2014

Если, как и я, вы пришли сюда, чтобы найти способ узнать, какой дате / времени соответствует значение даты JSon, вы можете сделать это следующим образом (используя wscript - хост скрипта Windows):

  1. сохранить следующий текст в файл с именем test.js (замените 1396566000000 своим собственным значением даты)

    переменная дата = новая дата (1396566000000); WScript.Echo (дата);

  2. из командной строки запустите:

    wscript test.js

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...