查看: 1357|回复: 0
打印 上一主题 下一主题

索引数据框和日期的例子

[复制链接]

2206

主题

2

听众

3万

积分

资深设计师

Rank: 7Rank: 7Rank: 7

纳金币
32449
精华
23

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

跳转到指定楼层
楼主
发表于 2013-6-17 16:03:05 |只看该作者 |倒序浏览
大约一个小时之前,我给出了关于索引数据框的表示。有个参会者问了关于日期以及如何基于日期范围进行过滤。我告诉他我的设想是将日期转换为数值,然后使用数值相关的范围。但事实证明我错了,下面是一个例子。

开始,我创建了一个基于创建域的存储对象。我们目的是想通过日期来进行搜索,因此我使用创建这个名字。同时将存储对象命名为data。虽然看起来很无聊,但是很有用。
  1. function doSeed() {
  2. var now = new Date();

  3. for(var i=0; i<10; i++) {
  4. var dayDiff = getRandomInt(1, 7);
  5. var thisDate = new Date();
  6. thisDate.setDate(now.getDate() + dayDiff);
  7. db.transaction(["data"],"readwrite").objectStore("data").add({created:thisDate});
  8. }
  9. }

  10. //Credit: Mozilla Developer Center
  11. function getRandomInt (min, max) {
  12. return Math.floor(Math.random() * (max - min + 1)) + min;
  13. }
复制代码
需要注意的是,由于索引数据框调用是异步的,因此代码需要处理更新,让用户知道什么时候操作结束了。由于这只是一个简单的演示,因此添加操作将很快结束,我就没必要担心了。
  1. function doSearch() {
  2. var fromDate = document.querySelector("#fromDate").value;
  3. var toDate = document.querySelector("#toDate").value;

  4. var range;

  5. if(fromDate == "" && toDate == "") return;

  6. var transaction = db.transaction(["data"],"readonly");
  7. var store = transaction.objectStore("data");
  8. var index = store.index("created");

  9. if(fromDate != "") fromDate = new Date(fromDate);
  10. if(toDate != "") toDate = new Date(toDate);

  11. if(fromDate != "" && toDate != "") {
  12. range = IDBKeyRange.bound(fromDate, toDate);
  13. } else if(fromDate == "") {
  14. range = IDBKeyRange.upperBound(toDate);
  15. } else {
  16. range = IDBKeyRange.lowerBound(fromDate);
  17. }

  18. var s = "";
  19. index.openCursor(range).onsuccess = function(e) {
  20. var cursor = e.target.result;
  21. if(cursor) {
  22. s += "<h2>Key "+cursor.key+"</h2><p>";
  23. for(var field in cursor.value) {
  24. s+= field+"="+cursor.value[field]+"
  25. ";
  26. }
  27. s+="</p>";
  28. cursor.continue();
  29. }
  30. document.querySelector("#status").innerHTML = s;
  31. }

  32. }
复制代码
现在就可以创建一个应用程序,它可以让我们添加包含Javascript合法日期的创建属性。请注意,我没有将它转为毫秒,而是直接传入。

最后只需在页面上添加两个日期域即可。在Chrome里还是不错的。


根据上述,我就可以创建一个上限,下限范围的索引数据框,并能在日期前,后或者在日期范围内的提示。

此处唯一需要转换的就是将用户的输入转换为真正的日期对象,这样就可以运行了。


运行下面的演示:

http://www.raymondcamden.com/demos/2013/jun/6/test1.html

分享到: QQ好友和群QQ好友和群 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
转播转播0 分享淘帖0 收藏收藏0 支持支持0 反对反对0
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

手机版|纳金网 ( 闽ICP备2021016425号-2/3

GMT+8, 2024-11-26 19:58 , Processed in 0.085498 second(s), 28 queries .

Powered by Discuz!-创意设计 X2.5

© 2008-2019 Narkii Inc.

回顶部