日付の比較の話2
まったく面倒でしかたがない
XMLデータからデータを持ってきて、掲載期間のところだけ表示させる仕掛け
xmlデータ
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <Root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <Row> <StartY>2011</StartY> <StartM>6</StartM> <StartD>1</StartD> <EndY>2011</EndY> <EndM>7</EndM> <EndD>24</EndD> <title>たいとる</title> </Row> <Row> <StartY>2011</StartY> <StartM>7</StartM> <StartD>25</StartD> <EndY>2011</EndY> <EndM>7</EndM> <EndD>31</EndD> <title>タイトル2</title> </Row> </Root>
スクリプト
$(document).ready(function(){ $.ajax({ url: "http://d.hatena.ne.jp/kenmituo/common/data/openclose.xml", dataType: "xml", success:xmlOpenClose }); } function xmlOpenClose(xml){ var date_now=new Date(); var rtn=""; $("Row", xml).each(function(){ var start_date=new Date($("StartY",this).text(), $("StartM",this).text()-1, $("StartD",this).text()); var end_date=new Date($("EndY",this).text(), $("EndM",this).text()-1, $("EndD",this).text()+1); if((start_date < date_now) && (date_now < end_date)){ alert(start_date + "/" + end_date); alert($("EndY",this).text(), $("EndM",this).text()-1, $("EndD",this).text()+1); rtn+="<p>hoge</p>"; end $("#open_close").html(rtn); }
問題点
最初のalertで1番目のデータのend_dateは2011/7/24と表示されるのが希望なんだけど、Feb 26 2012となる。
なんでかなーと2個目のalertで調べると2011 6 241となっていた。日付を加算してくれていた訳だ。
Date関数の中で足し算すると、文字列の結合になってしまうのが原因だった。引き算は平気なのに。
parseInt($("EndD",this).text())+1
数値型なんだよ!ってアピールすれば大丈夫!
・・・やっぱり面倒だね、、、