- 浏览: 234761 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (173)
- ruby (38)
- rails (42)
- javascript (7)
- jquery (1)
- linux (15)
- design patterns (1)
- project management (6)
- IT (7)
- life (19)
- data structures and algorithm analysis (2)
- css (1)
- prototype (1)
- mysql (4)
- html (1)
- git (3)
- novels (1)
- c (1)
- Latex (13)
- erlang (1)
- 求职 (1)
- API (0)
- Shell (4)
- Rabbit MQ (1)
- 计算机基础 (1)
- svn (2)
- 疑问 (1)
最新评论
-
zhangyou1010:
回去倒立去,哈哈。
作为一个程序员,身体很重要! -
Hooopo:
Ruby MetaProgramming is all abo ...
Metaprogramming Ruby -
orcl_zhang:
yiqi1943 写道LZ现在上学还是工作呢工作好多年了。不过 ...
2011年 -
yiqi1943:
LZ现在上学还是工作呢
2011年 -
tjcjc:
query cache
就是一个简单的hash
key就是sq ...
Rails sql延迟加载和自带缓存
客户的要求(查看图片),点击Range,可以选择一个日期范围,点击Calc可以选择日期的计算,计算完后,结果会同时显示在后面的input里,可以看下图片。因为考虑到很多地方要用到,所以写到help方法里了。感觉这个东西以后还会用,估计其他的同学也有可能会用到类似的功能,所以发出来,大家看看。计算日期用ruby代码来写很方便,用js代码来写,就很麻烦。
_time_period.html.erb
关于这段js代码,其实一直在后台有ruby实现的,相对而言,简单很多
但是考虑到,如果用js的话,可以避免多余的和后台通信,而且以后复用的话,不用在加很多代码。
关于这段js日期计算,冥冥之中感觉应该还有比较更好的写法,对js日期这块不熟悉,希望有经验的能提出意见。
就是他了,year,month,day在这里其实每次只有一个值在变,但是变化的范围不确定。
恩,没注意到 。。。我改下。。。
顺便把页面html里的几个相同的js代码也拿出来放一起。
因为有部分代码是旧有的,所以代码风格看上去有点窘。
方法语法?你指的是help?请明示。谢谢
_time_period.html.erb
<% prefix << '_' unless prefix.blank? %> <a onclick="$('<%= prefix %>unequal').style.display=($('<%= prefix %>unequal').style.display=='none' ? '' : 'none');$('<%= prefix %>widget').style.display='none';$('<%= prefix %>change_type').value = '';$('<%= prefix %>_num').value='';$('<%= prefix %>time_type').value='';$('#<%= prefix %>big').value = '';$('<%= prefix %>less').value='';" >Range</a> <a onclick="$('<%= prefix %>widget').style.display=($('<%= prefix %>widget').style.display=='none' ? '' : 'none');$('<%= prefix %>unequal').style.display='none';$('<%= prefix %>big').value = '';$('<%= prefix %>less').value='';$('<%= prefix %>change_type').value = '';$('<%= prefix %>time_num').value='';$('<%= prefix %>time_type').value='';" >Calc</a><span> = <%= calendar_date_select_tag("#{prefix}equal",nil,:style => "width: 80px;",:embedded => false,:year_range => 30.years.ago..-30.years.ago) %> </span><span id='<%= prefix %>unequal' style='display: none;'>> <%= calendar_date_select_tag("#{prefix}big",nil,:style => "width: 80px;",:embedded => false,:year_range => 30.years.ago..-30.years.ago) %> < <%= calendar_date_select_tag("#{prefix}less",nil,:style => "width: 80px;",:embedded => false,:year_range => 30.years.ago..-30.years.ago ) %> </span> <span id='<%= prefix %>widget' style='display:none;'> <script type="text/javascript"> var equal = $('<%= prefix %>equal'); var change_type = $('<%= prefix %>change_type'); var time_num = $('<%= prefix %>time_num'); var time_type = $('<%= prefix %>time_type'); equal.observe('change', function(event){ count_date(); }); change_type.observe('change', function(event){ count_date(); enter_equal(); }); time_num.observe('change', function(event){ count_date(); enter_equal(); }); time_type.observe('change', function(event){ count_date(); enter_equal(); }); function enter_equal(){ if($F('<%= prefix %>equal')==''){alert('Please enter a date first!');} } function count_date(){ if((!equal.value.blank()) && (!change_type.value.blank()) && (!time_num.value.blank()) && (!time_type.value.blank())){ var time_num_number = Number(time_num.value); if (/^\d+$/.test(String(time_num.value)) && IsDate(equal.value)) { var r = equal.value.match(/^(\d{1,4})([-|\/])(\d{1,2})\2(\d{1,2})$/); var year = Number(r[1]); var month = Number(r[3]); var day = Number(r[4]); if(time_type.value == 0){ $('<%= prefix %>result').value = equal.value; } else { if(change_type.value == 'plus' && time_type.value == 'days'){ day = day + time_num_number; } else if (change_type.value == 'plus' && time_type.value == 'months') { month = month + time_num_number; } else if (change_type.value == 'plus' && time_type.value == 'years'){ year = year + time_num_number; } else if (change_type.value == 'minus' && time_type.value == 'days'){ day = day - time_num_number; } else if (change_type.value == 'minus' && time_type.value == 'months'){ month = month - time_num_number; } else if (change_type.value == 'minus' && time_type.value == 'years'){ year = year - time_num_number; } var result = correct_date(Number(year),Number(month),Number(day)); $('<%= prefix %>result').value = result; } } else { $('<%= prefix %>result').value = ''; } } else { $('<%= prefix %>result').value = ''; } } </script> <select id='<%= prefix %>change_type' style='width: 80px;'> <option value=''>(+/-)</option> <option value='plus'>+</option> <option value='minus'>-</option> </select> <%= text_field_tag("#{prefix}time_num",nil,:style => 'width: 80px;' ) %> <select id='<%= prefix %>time_type' style='width: 80px;' > <option value=''>(d/m/y)</option> <option value='days'>Days</option> <option value='months'>Months</option> <option value='years'>Years</option> </select> <input type='text' readonly='readonly' id='<%= prefix %>result' value='' size=10 /> </span>
<%= render :partial => 'time_period',:locals => { :prefix => ''} %>
//匹配//yyyy-mm-dd || yyyy/mm/dd function IsDate(str) { var r = str.match(/^(\d{1,4})(-|\/)(\d{1,2})\2(\d{1,2})$/); if(r==null)return false; var d = new Date(r[1], r[3]-1, r[4]); return (d.getFullYear()==r[1]&&(d.getMonth()+1)==r[3]&&d.getDate()==r[4]); } //修正日期 //这里一直想不到很好的实现方法 function correct_date(year,month,day){ var stand_day = day_max(year,month); if(day > stand_day){ day = day - stand_day; month = month + 1; } if(month > 12){ month = month - 12; year = year + 1; } if(day <= 0){ var last_stand_day = day_max(year, month - 1); month = month - 1; day = day + last_stand_day; } if(month <= 0){ month = month + 12; year = year - 1; } if(year <= 0){ alert('invalid year!'); return false; } var str_month = (month >= 10) ? String(month) : '0'+ String(month); var str_day = (day >= 10) ? String(day) : '0'+ String(day); var str = String(year)+'-'+str_month+'-'+str_day; if(IsDate(str)){ return str; } else { return correct_date(year,month,day); } } //当月的最大日期 function day_max(year,month){ if(month==4 || month==6 || month==9 || month==11){ return 30; } else if(month==1 || month==3 || month==5 || month==7 || month==8 || month==10 || month==12){ return 31; } else { if(isleap(year)){ return 29; } else { return 28; } } } //是否是闰年 function isleap(year){ return (year % 4 == 0 || (year % 100 == 0 && year % 400 == 0)) }
关于这段js代码,其实一直在后台有ruby实现的,相对而言,简单很多
if params[:change_type] == "plus" date = params[:equal].to_date + params[:time_num].to_i elsif params[:change_type] == "minus" date = params[:equal].to_date - params[:time_num].to_i end if params[:change_type] == "plus" date = date.months_since(params[:time_num].to_i) elsif params[:change_type] == "minus" date = date.months_ago(params[:time_num].to_i) end
但是考虑到,如果用js的话,可以避免多余的和后台通信,而且以后复用的话,不用在加很多代码。
关于这段js日期计算,冥冥之中感觉应该还有比较更好的写法,对js日期这块不熟悉,希望有经验的能提出意见。
就是他了,year,month,day在这里其实每次只有一个值在变,但是变化的范围不确定。
//修正日期 function correct_date(year,month,day){ var stand_day = day_max(year,month); if(day > stand_day){ day = day - stand_day; month = month + 1; } if(month > 12){ month = month - 12; year = year + 1; } if(day <= 0){ var last_stand_day = day_max(year, month - 1); month = month - 1; day = day + last_stand_day; } if(month <= 0){ month = month + 12; year = year - 1; } if(year <= 0){ alert('invalid year!'); return false; } var str_month = (month >= 10) ? String(month) : '0'+ String(month); var str_day = (day >= 10) ? String(day) : '0'+ String(day); var str = String(year)+'-'+str_month+'-'+str_day; if(IsDate(str)){ return str; } else { return correct_date(year,month,day); } }
评论
5 楼
orcl_zhang
2010-07-31
发现je一个bug,我代码贴上去是
yearyear = year - time_num_number;
但是我实际上代码是
year = year - time_num_number;
不信你贴下来看看。。
yearyear = year - time_num_number;
但是我实际上代码是
year = year - time_num_number;
不信你贴下来看看。。
4 楼
orcl_zhang
2010-07-31
鹤惊昆仑 写道
为啥不用模板哪?直接拼字符串可真难维护。
恩,没注意到 。。。我改下。。。
顺便把页面html里的几个相同的js代码也拿出来放一起。
因为有部分代码是旧有的,所以代码风格看上去有点窘。
3 楼
鹤惊昆仑
2010-07-31
为啥不用模板哪?直接拼字符串可真难维护。
2 楼
orcl_zhang
2010-07-30
Soloara 写道
LZ的方法语法不够优美
方法语法?你指的是help?请明示。谢谢
1 楼
Soloara
2010-07-30
LZ的方法语法不够优美
发表评论
-
calendar
2012-02-24 11:04 800http://fullcalendar.vinsol.com/ ... -
ActiveRecord::Dirty
2011-11-21 10:29 742引用Track unsaved attribute chang ... -
TinyTDS
2011-09-20 09:29 781tiny_tds https://github.com/ra ... -
pandoc-ruby
2011-09-11 11:50 1127https://github.com/alphabetum/p ... -
Rails: Calling render() outside your Controllers
2011-04-28 17:15 790From:http://blog.choonkeat.com/ ... -
为什么这样才能装上
2011-02-20 10:39 986引用u2@u2-laptop:~$ sudo gem inst ... -
Rails的transaction
2011-01-07 18:36 3008今天同事问我关于rails transaction,如 ... -
Rails sql延迟加载和自带缓存
2010-12-30 01:11 1554color_lot_manuallies = color_lo ... -
关于rhtml
2010-12-23 00:26 827在视图里有这样一段代码 sorted_op_items = o ... -
will_paginate ajax
2010-11-26 13:21 878两种方法 一, @@pagination_options ... -
save > save!(转)
2010-11-19 19:57 699Thoughtbot folks have a great a ... -
USE INDEX with Active Record finders(转)
2010-11-18 22:07 861可以通过强制指定index的方法优化find MySQL do ... -
html转义
2010-11-17 23:03 911$("#contacts").html(& ... -
Rails HTTP Status Code to Symbol Mapping
2010-11-17 22:40 1579http状态码http://zh.wikipedia.org/ ... -
Scaling Rails很不错的视频
2010-09-29 18:10 801自从railscasts开始讲解rails3后就很久没看了。 ... -
ActionController源码(待续)
2010-09-20 15:14 970/usr/local/lib/ruby/gems/1.8/ge ... -
rails源码ActionSupport(待续)
2010-08-31 16:59 896一些奇淫技巧 class Object # An ... -
动态的增加auto_complete
2010-08-30 12:17 843http://www.iteye.com/problems/3 ... -
rails 记录
2010-08-26 15:27 691代码里有这样一句 self.purchase_invoices ... -
用Array来实现OrderedHash
2010-08-18 14:29 877偶然发现电脑的角落里有这样的一段代码.功能是用Array实现的 ...
相关推荐
NULL 博文链接:https://sonofgod.iteye.com/blog/1743788
找到的计算车险的东东,大家可以用用,有一定的参考价值
js东8区日期处理两种方法; 例:'/Date(1333245600000+0800)/' 返回2012-04-01
修改MAC地址的小东东,不用其他麻烦的修改.XP可用!其他的操作系统没试过!
没事时做的双色球的小东东......................................
2022年东数西算深度研究报告:“东数西算”启动,利好高性能计算芯片.pdf 2022年东数西算深度研究报告:“东数西算”工程全面启动,数字经济基础设施.pdf 2022年东数西算深度研究报告:“东数西算”工程全面启动,...
这个是定时关机的小东东,文件小,操作简便。
BIOS升级模拟练习.rar 0.4MB 练习bios升级小东东
游戏用的变速器,可加快电脑时间进程游戏用的变速器,可加快电脑时间进程游戏用的变速器,可加快电脑时间进程游戏用的变速器,可加快电脑时间进程游戏用的变速器,可加快电脑时间进程
2022东数西算深度研究资料合集,共15份。 1、东数西算,政策强音,拉开数字经济新基建的大幕 2、东数西算新基建、景气上行云时代 3、“东数西算”工程正式启动,有望提升新能源消纳规模 4、“东数西算”提振产业,...
我用google map 和ajax 做的小东东,比较简单啊
都说wcf传输视频不好,这里做了一个测试,可打开对象摄像头,桌面监视等,局网测试通过
使用的是一般控件的编程,大家可以看看哈,换点积分,感觉还是有用的access数据库
自选语言编写程序:前一日函数PreDate。实现功能为:输入1000 年到2018 年之间的某个日期,函数返回这一天的前一天的日期。(考虑无效输入:首先判断输入日期是否合法.)
2022年东数西算深度研究报告:详解计算机“东数西算“与AMD收购Xilinx.pdf
小学生的软件, 脱式计算,计算复杂的算式直接写出的数 写出计算过程, 支持个种计算, 学习的好东东。
何朝东老师的计算机组成原理实验报告、实验心得,包括期末样题
2022年东数西算深度研究报告:“东数西算”工程正式全面启动.pdf
设置不同时间段让键盘处于活动状态,翘班时可以不被发现,显示自己始终在线
这是关于一个java三大框架联系之后的登陆页面的实现