【问题标题】:Javascript day/month/year into formJavascript 日/月/年转换成表格
【发布时间】:2013-02-27 00:38:24
【问题描述】:

我正在尝试在表单中自动选择月份、日期和年份。我确信这很简单,但我对 Javascript 很不熟悉。在下面的代码中,月份选择工作正常,但日期始终是实际日期的 +1,而年份根本不工作。如果有人可以提供帮助,将不胜感激!谢谢!

<form name="form" action="b.html" method="post">
    <select id="month" name="month">
        <option id="1" value="January">January</option>
        <option id="2" value="February">February</option>
        <option id="3" value="March">March</option>
        <option id="4" value="April">April</option>
        <option id="5" value="May">May</option>
        <option id="6" value="June">June</option>
        <option id="7" value="July">July</option>
        <option id="8" value="August">August</option>
        <option id="9" value="September">September</option>
        <option id="10" value="October">October</option>
        <option id="11" value="November">November</option>
        <option id="12" value="December">December</option>
    </select>
    /
    <select id="day" name="day">
        <option id="1" value="1">1</option>
        <option id="2" value="2">2</option>
        <option id="3" value="3">3</option>
        <option id="4" value="4">4</option>
        <option id="5" value="5">5</option>
        <option id="6" value="6">6</option>
        <option id="7" value="7">7</option>
        <option id="8" value="8">8</option>
        <option id="9" value="9">9</option>
        <option id="10" value="10">10</option>
        <option id="11" value="11">11</option>
        <option id="12" value="12">12</option>
        <option id="13" value="13">13</option>
        <option id="14" value="14">14</option>
        <option id="15" value="15">15</option>
        <option id="16" value="16">16</option>
        <option id="17" value="17">17</option>
        <option id="18" value="18">18</option>
        <option id="19" value="19">19</option>
        <option id="20" value="20">20</option>
        <option id="21" value="21">21</option>
        <option id="22" value="22">22</option>
        <option id="23" value="23">23</option>
        <option id="24" value="24">24</option>
        <option id="25" value="25">25</option>
        <option id="26" value="26">26</option>
        <option id="27" value="27">27</option>
        <option id="28" value="28">28</option>
        <option id="29" value="29">29</option>
        <option id="30" value="30">30</option>
        <option id="31" value="31">31</option>
    </select>
    /
    <select id="year" name="year">
        <option id="2012" value="2012">2012</option>
        <option id="2013" value="2013">2013</option>
        <option id="2014" value="2014">2014</option>
        <option id="2015" value="2015">2015</option>
        <option id="2016" value="2016">2016</option>
        <option id="2017" value="2013">2017</option>
        <option id="2018" value="2014">2018</option>
        <option id="2019" value="2015">2019</option>
        <option id="2020" value="2016">2020</option>
    </select>

    <script>
    var d = new Date();
    var month = d.getMonth();
    var day = d.getDate();
    var year = d.getFullYear();
    document.form.month[month].selected = month;
    document.form.day[day].selected = day;
    document.form.year[year].selected = year;
    </script>
</form>

【问题讨论】:

  • 你的代码有什么问题?
  • “不工作”从不足以说明问题。
  • 我从不喜欢使用select 进行日期管理。允许像 2 月 31 日这样的日期非常容易。
  • 我认为,如果您真正了解您正在使用的值,您将能够很快弄清楚。请记住,select 是一个数组,因此第一个元素的索引值为 0。此外,对于您有 9 个选项的年份,请查看您用于从数组中选择的值。
  • @Matt,您从rationalboss 中选择的答案有错误。您会发现日历何时滚动到一月。

标签: javascript date


【解决方案1】:

你有冲突的 id! id 是页面上的奇异值。 Selected 是一个布尔值,您将其设置为一个数字。

去掉id,

var d = new Date();
var month = d.getMonth();
var day = d.getDate();
var year = d.getFullYear();
document.form.month.options[month].selected = true;
document.form.day.options[day-1].selected = true;
document.form.year.options[year-2012].selected = true;

【讨论】:

  • 我应该提到上面的代码适用于从零开始的选项索引。月份是从零开始的,所以我们不需要减一。需要从一天中减去一个以使该零为基础。最后减去可能的第一年使其为零。
【解决方案2】:

这段代码:

var day = d.getDate();
...
document.form.year[year].selected = true;

应该是

var day = d.getDate()-1;
...
document.form.year[year - 2012].selected = true;

天必须减1,因为这部分:document.form.day[day]是一个数组,记住数组是从0开始的,而getDate()是从1开始的。

为什么您不需要为月份部分减去 1?因为JavaScript Date Object's month index begins with 0!

【讨论】:

  • 为什么要将布尔值设置为数字?
  • 我想这有助于解释为什么需要减去 1。当您尝试调整索引偏移量时,您的代码使返回的日期看起来不正确。这样@epascarello 的回答就更干净了。
【解决方案3】:

在这里查看我的工作解决方案:http://jsfiddle.net/powtac/gVWrz/7/

document.form.month[month].selected = true;
document.form.day.value             = day;
document.form.year.value            = year;

【讨论】:

    【解决方案4】:

    选择元素中的选项由从 [0] 开始的索引访问。

    导致:

    document.form.month[0].value is 'January'
    document.form.day[0].value is 1;
    document.form.year[0].selected is 2012;
    

    请务必正确计算您的索引或使用您的项目的值作为索引:

    var year = d.getFullYear();
    document.getElementById('year').value = year;
    

    请从您的选项中删除“id”属性。在文档中使用相同的 id 两次是不好的做法。对元素来说应该是唯一的。​​​​​​​​​​​

    【讨论】:

      【解决方案5】:

      您正试图通过它们各自的索引来访问这些元素。当您访问月份时,巧合的是它会显示正确的月份,因为 getMonth() 返回一月份的 0。当您选择第三个月 (index=2) 时,它正确选择了 March 作为 index=2 的元素。

      对于日期和年份,我将您的代码改为.value。您不能针对月份执行此操作,因为您使用的值是一月、二月、三月等,而不是它们的索引。

      <script>
          var d = new Date();
          var month = d.getMonth();
          var day = d.getDate();
          var year = d.getFullYear();
          document.form.month.options[month].selected = true;
          document.form.day.value = day;
          document.form.year.value = year;
      </script>
      

      【讨论】:

      • 感谢您和所有回答问题的人!
      • 这个选择的答案有问题,它将布尔值设置为一个数字。一月份会发生什么?它失败!!!! -1
      猜你喜欢
      • 2015-04-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多