Moment JS数组无效日期

时间:2016-10-16 06:21:59

标签: javascript arrays for-loop momentjs

我只想要第二列的时间,然后再添加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);
  
}
&#13;
<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>
&#13;
&#13;
&#13;

4 个答案:

答案 0 :(得分:1)

它正在抛出错误,因为您正在尝试访问包含表头的行的所有行

你可能只考虑遍历tbody的行 请检查以下代码段

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 另外,你不能一次添加整个数组。您可以考虑一次添加每个项目,然后插入数组

答案 1 :(得分:1)

您没有正确关闭<td>代码,这就是myTable.rows[i].cells[1].innerHTML没有返回日期字符串的原因。

试试这个

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

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>

答案 2 :(得分:0)

尝试这样做:

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);
}

希望这有帮助

答案 3 :(得分:0)

你有一系列问题。

HTML

您尚未关闭行的第一个<td>标记。

    <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>