显示选择选项文本日期

时间:2013-09-19 17:51:34

标签: javascript date

我有一个选择选项下拉菜单,仅显示星期一(选择特定的一周)。

<select id="monday" name="monday">
<option value="7">
  Mon 1/7/2013 (Week 02)
</option><option value="14">
  Mon 1/14/2013 (Week 03)
</option>
// etc...
</select>

我想获取选项文本(即2013年1月7日星期一(第02周))并使用它来在表格中显示该周的日期:

<div id='mondaydate'>Mon 1/7/2013 (Week 02)</div> | <div id='tuesdaydate'>Tue 1/8/2013 (Week 02)</div> | <div id='wednesdaydate'>Wed 1/9/2013 (Week 02)</div>...

当选择选项发生变化时,我希望<div>中的日期也会发生变化。现在我的JavaScript(不起作用)是:

<script type='text/javascript'>
var sel = document.getElementById("monday");
var text = sel.options[sel.selectedIndex].text;
var mon=new Date("text");

document.getElementById("mondaydate").innerHTML = "mon.setDate(mon.getDate()+0)";
document.getElementById("tuesdaydate").innerHTML = "mon.setDate(mon.getDate()+1)";
document.getElementById("wednesdaydate").innerHTML = "mon.setDate(mon.getDate()+2)";
document.getElementById("thursdaydate").innerHTML = "mon.setDate(mon.getDate()+3)";
document.getElementById("fridaydate").innerHTML = "mon.setDate(mon.getDate()+4)";
document.getElementById("saturdaydate").innerHTML = "mon.setDate(mon.getDate()+5)";
document.getElementById("sundaydate").innerHTML = "mon.setDate(mon.getDate()+6)";
</script>

可以这样做,还是我在转动轮子?

更新 - 解决方案

正如所建议的那样,我得到了一个快乐的小报价,所以我摆脱了那些。同样如建议的那样,日期需要格式化为第一次尝试仅提供时间戳。使用this date format solution我能够将日期格式化为人类可读的内容。

完整的JavaScript代码:

<script type='text/javascript'>
function formatDate(date, fmt) {
    function pad(value) {
        return (value.toString().length < 2) ? '0' + value : value;
    }

    return fmt.replace(/%([a-zA-Z])/g, function (_, fmtCode) {
        switch (fmtCode) {
        case 'Y':
            return date.getUTCFullYear();
        case 'M':
            return pad(date.getUTCMonth() + 1);
        case 'd':
            return pad(date.getUTCDate());
        case 'H':
            return pad(date.getUTCHours());
        case 'm':
            return pad(date.getUTCMinutes());
        case 's':
            return pad(date.getUTCSeconds());
        default:
            throw new Error('Unsupported format code: ' + fmtCode);
        }
    });
}
function changeDate()
{
var sel = document.getElementById("monday");
var text = sel.options[sel.selectedIndex].text;
var mon = new Date(text);
document.getElementById("mondaydate").innerHTML = formatDate(new Date(mon.setDate(mon.getDate()+0)), '%M/%d/%Y'); 
document.getElementById("tuesdaydate").innerHTML = formatDate(new Date(mon.setDate(mon.getDate()+1)), '%M/%d/%Y'); 
document.getElementById("wednesdaydate").innerHTML = formatDate(new Date(mon.setDate(mon.getDate()+1)), '%M/%d/%Y'); 
document.getElementById("thursdaydate").innerHTML = formatDate(new Date(mon.setDate(mon.getDate()+1)), '%M/%d/%Y'); 
document.getElementById("fridaydate").innerHTML = formatDate(new Date(mon.setDate(mon.getDate()+1)), '%M/%d/%Y'); 
document.getElementById("saturdaydate").innerHTML = formatDate(new Date(mon.setDate(mon.getDate()+1)), '%M/%d/%Y'); 
document.getElementById("sundaydate").innerHTML = formatDate(new Date(mon.setDate(mon.getDate()+1)), '%M/%d/%Y'); 
}
</script>

另外,请注意,最初我用星期一+0,星期二+1,星期三+2等错误地设置日期。(没有注意到它,因为我得到的只是时间戳)。这似乎是设置日期,所以星期一和星期二显示正确,但是星期三显示星期四的日期,星期四显示星期日的日期,等等每个增加+1而不是解决了这个问题。

3 个答案:

答案 0 :(得分:2)

删除变量周围的引号,否则它只显示引号中的内容而不执行任何逻辑:

var sel = document.getElementById("monday");
var text = sel.options[sel.selectedIndex].text;
var mon=new Date(text); <--- No quotes around text variable


document.getElementById("mondaydate").innerHTML = mon.setDate(mon.getDate()+0); <--- No quotes

//Same with everything below, stop with the quotes!
document.getElementById("tuesdaydate").innerHTML = mon.setDate(mon.getDate()+1);
document.getElementById("wednesdaydate").innerHTML = mon.setDate(mon.getDate()+2);
document.getElementById("thursdaydate").innerHTML = mon.setDate(mon.getDate()+3);
document.getElementById("fridaydate").innerHTML = mon.setDate(mon.getDate()+4);
document.getElementById("saturdaydate").innerHTML = mon.setDate(mon.getDate()+5);
document.getElementById("sundaydate").innerHTML = mon.setDate(mon.getDate()+6);

答案 1 :(得分:0)

你有很多不必要的引用,这会搞砸你的代码。

看看这个:

JS:

$("#monday").click(function(){
    var sel = document.getElementById("monday");
    var text = sel.options[sel.selectedIndex].text;
    var mon=new Date(text);
    console.log(mon);
    document.getElementById("mondaydate").innerHTML = mon.setDate(mon.getDate()+0);
});

在这里找到工作小提琴:http://jsfiddle.net/bnWRU/1/

答案 2 :(得分:0)

tymeJV已经回答了,但我认为你在javascript中可能会遇到日期格式方面的问题。

我宣传这篇文章:Javascript get date in format

相关问题