Getting Date and/or checking for it in JSON Object?
我有一个JSON对象,它可以存储一个Date(和/或任何其他JS对象),但我不知道如果它存在,它将如何解决它。 例如,我有这个示例代码,但它不起作用:
1 2 3 4 5 6 7 8 9 10 11 12 | 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'); } } } } |
但是,它只是保持返回
- 编辑 -
这是我在调试器中看到的:
1 2 3 4 5 | Object ->isADate: Fri Nov 26 2010 20:30:57 GMT-0800 (Pacific Standard Time) --->__proto__: Date ->notADate:"some string" --->__proto__: Object |
这是JSON即时创建:
1 2 | var dateStorage = new storageLocker('date-test'); dateStorage.save({'isADate':new Date(),'notADate':'some string'}); |
这是我脚本的这部分代码(http://github.com/oscargodson/storagelocker)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | 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; } |
非常感谢! 希望这有助于更多!
您想看看这个:如何使用JavaScript知道对象是否是日期
基本上"最安全" - 不是100%故障保险,但你应该没问题 - 是做功能检测。
但是,请确保您的JSON条目实际上是日期对象而不是字符串,在这种情况下,这将不起作用,您将需要使用
编辑:关注您的2条评论:
JSON不允许您以Date格式存储对象。所以,这里已经存在差异。要么你没有真正处理JSON对象,要么你没有按照它们应该的方式处理它们。
有关如何使用JSON.parse的reviver参数的信息,请参阅此页面以获取有关在JavaScript中使用JSON的官方文档,因为日期应存储为字符串,然后"复活"到Date对象。
此外,typeof返回对象并不一定意味着您不处理字符串,例如:
1 | typeof new String("test") // object |
现在假设你现在确实有一个Date对象,我看不出对
1 2 3 4 | var t = new Date(); alert(t.Date) // undefined alert(t.getMonth) // code of the function, so not undefined alert(typeof t.getMonth != 'undefined') // true |
因此,使用
如果像我一样,你在这里寻找一种方法来发现JSon日期值等于的日期/时间,你可以这样做(使用wscript - Windows脚本宿主):
将以下文本保存到名为test.js的文件中(用您自己的日期值替换1396566000000)
var date = new Date(1396566000000);
WScript.Echo(日期);
从命令提示符运行:
wscript test.js