【问题标题】:Moment JS Array Invalid DateMoment JS 数组无效日期
【发布时间】:2016-10-16 06:21:59
【问题描述】:

我只想要第二列的时间,然后添加 2 小时。我正在使用 momentJS 库。这是我目前所拥有的。

function myFunction(){

    var cellData = [];
    var i;

    var myTable = document.getElementById("myTable");

    for (i=0; i<myTable.rows.length; i++) {

        cellData.push(myTable.rows[i].cells[1].innerHTML);

    }
    var x = [moment(cellData).add(2, 'h').format('MM/DD/YYYY hh:mm')];
    alert(x);
  
}
<table id="myTable" border="1">
    <tbody>
        <tr>
            <td>A<td>
            <td>2016-08-24 15:45</td>
            <td>C</td>
        </tr>
        <tr>
            <td>A<td>
            <td>2016-08-24 16:45</td>
            <td>C</td>
        </tr>
    </tbody>

【问题讨论】:

  • 你遇到了什么错误?
  • 您想要字符串形式的时间还是忽略日期戳的日期格式的时间?

标签: javascript arrays for-loop momentjs


【解决方案1】:

您没有正确关闭&lt;td&gt; 标签,这就是myTable.rows[i].cells[1].innerHTML 不返回日期字符串的原因。

试试这个

&lt;script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"&gt;&lt;/script&gt;

function myFunction() {

  var cellData = [];
  var i;
  var x = [];
  var myTable = document.getElementById("myTable");

  for (i = 0; i < myTable.rows.length; i++) {
    cellData.push(myTable.rows[i].cells[1].innerHTML);
    date = moment(cellData[i], "YYYY-MM-DD HH:mm").add(2, 'h').format('MM/DD/YYYY hh:mm');
    x.push(date);
  }


  console.log(x);
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.13.0/moment.min.js"></script>
<table id="myTable" border="1">

  <tbody>

    <tr>
      <td>A</td>
      <td>2016-08-24 15:45</td>
      <td>C</td>
    </tr>

    <tr>
      <td>A</td>
      <td>2016-08-24 16:45</td>
      <td>C</td>
    </tr>

  </tbody>
</table>

<button type="button" onclick="myFunction()">Click me</button>

【讨论】:

  • 你能证明为什么你需要 jQuery 来完成这样的任务吗? jQuery 不会变魔术。
  • @AdamAzad 是的,你是对的,我忘记删除了
【解决方案2】:

它抛出一个错误,因为您试图访问所有包含表头行的行

你可能会考虑只遍历 tbody 的行 检查以下代码sn -p

window.onload=function(){
  myFunction();
}
function myFunction(){

var cellData = [];
var i;

var myTable = document.getElementById("myTable");
var cellData=[];
  $("#myTable tbody tr").each(function(){
  var date=$(this).find('td').eq(2).html();
    
  var dateModified=moment(date).add(2, 'h').format('MM/DD/YYYY hh:mm A')
  
  cellData.push(dateModified);
});
  console.log(cellData);
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.15.1/moment.min.js"></script>

<table id="myTable" border="1">

<tbody>

    <tr>
        <td>A<td>
        <td>2016-08-24 15:45</td>
        <td>C</td>
    </tr>

    <tr>
        <td>A<td>
        <td>2016-08-24 16:45</td>
        <td>C</td>
    </tr>

</tbody>

希望这会有所帮助 检查此链接http://codepen.io/sahithiK/pen/LRJGaJ 另一件事,您不能一次添加整个数组。您可以考虑一次添加每个项目,然后插入到数组中

【讨论】:

    【解决方案3】:

    尝试这样做:

    function myFunction(){
    
        var x = [];  
        var myTable = document.getElementById("myTable");
    
        for (var i=0; i<myTable.rows.length; i++) {  
             x.push(moment(myTable.rows[i].cells[1].innerHTML).add(2, 'h').format('MM/DD/YYYY hh:mm')); 
        }
        alert(x);
    }
    

    希望对你有帮助

    【讨论】:

      【解决方案4】:

      你有一系列问题。

      HTML

      您尚未关闭行的第一个 &lt;td&gt; 标记。

          <td>A</td>
          <!--  ^ -->
          <td>2016-08-24 15:45</td>
          <td>C</td>
      

      JavaScript

      cellData 是一个数组,不能将日期字符串数组传递给 momentJS。相反,创建 momentJS 实例并将其格式化字符串推送到 cellData

      function myFunction(){
      
      var cellData = [];
      var i;
      
      var myTable = document.getElementById("myTable");
      
      for (i=0; i<myTable.rows.length; i++) {
      
          var momentObj = moment(myTable.rows[i].cells[1].innerHTML).add(2, 'h').format('MM/DD/YYYY hh:mm');
          cellData.push(momentObj);
        
      
      }
      
        console.log(cellData); // ["08/24/2016 05:45", "08/24/2016 06:45"]
      
      }
      
      myFunction();
      <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.15.1/moment.min.js"></script>
      <table id="myTable" border="1">
      <tbody>
          <tr>
              <td>A</td>
              <td>2016-08-24 15:45</td>
              <td>C</td>
          </tr>
          <tr>
              <td>A</td>
              <td>2016-08-24 16:45</td>
              <td>C</td>
          </tr>
      </tbody>
      </table>

      【讨论】:

      • 非常感谢您的回复。我不知道您不能将日期字符串数组添加到 momentJS。这对我有用。
      • 不客气,如果对您有帮助,您可以接受答案:)。
      猜你喜欢
      • 2020-08-19
      • 1970-01-01
      • 2018-04-24
      • 2017-10-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-27
      • 2018-02-10
      相关资源
      最近更新 更多