【问题标题】:How to automatically generate dynamic moment.js?如何自动生成动态moment.js?
【发布时间】:2019-05-06 06:40:57
【问题描述】:

我们的想法是让一页成为月度表格,每行都有周数和编辑选择。为此,我需要 moment.js 和 javascript 来生成表格。定义确切的年份并每月生成一个表、周数和一周的第一天。

如果您能帮我解决这个问题,我将不胜感激。

这里我们使用 jsfiddle 和示例。

例子:

.table-bordered {
    border: 1px solid #dee2e6;
}
.table-bordered thead td, .table-bordered thead th {
    border-bottom-width: 2px;
}
.table thead th {
    vertical-align: bottom;
    border-bottom: 2px solid #dee2e6;
}
.table-bordered td, .table-bordered th {
    border: 1px solid #dee2e6;
}
table.table thead th {
    border-top: none;
}
table.table td, table.table th {
    padding-top: 1.1rem;
    padding-bottom: 1rem;
}
.table td, .table th {
    padding: .75rem;
    vertical-align: top;
    border-top: 1px solid #dee2e6;
}
table td {
    font-size: .9rem;
    font-weight: 300;
}
Generate 2019 (target) year months, week number and first day automatically with moment.js. I'm gonna use php to make tables dynamically.</p>

<table id="tablePreview" class="table table-hover table-bordered">
<!--Table head-->
  <thead>
    <tr>
      <th>January</th>
      <th>Week first day</th>
      <th>Last Name</th>
      <th>Username</th>
      <th>Edit</th>
     
    </tr>
  </thead>
  <!--Table head-->
  <!--Table body-->
  <tbody>
    <tr>
      <th scope="row">Week number 1</th>
      <td>2019-01-01</td>
      <td>Otto</td>
      <td>@mdo</td>
      <td><a href="/edit-link.php">Edit</a></td>
   
    </tr>
    <tr>
      <th scope="row">Week number 2</th>
      <td>2019-01-01</td>
      <td>Thornton</td>
      <td>-</td>
      <td><a href="/edit-link.php">Edit</a></td>

    </tr>
    <tr>
      <th scope="row">Week number 3</th>
      <td>2019-01-01</td>
      <td>the Bird</td>
      <td>@twitter</td>
      <td><a href="/edit-link.php">Edit</a></td>

    </tr>
  </tbody>
</table>
<br><br>
<table id="tablePreview" class="table table-hover table-bordered">
<!--Table head-->
  <thead>
    <tr>
      <th>February</th>
      <th>Week first day</th>
      <th>Last Name</th>
      <th>Username</th>
      <th>Edit</th>
     
    </tr>
  </thead>
  <!--Table head-->
  <!--Table body-->
  <tbody>
    <tr>
      <th scope="row">Week number 5</th>
      <td>2019-02-01</td>
      <td>Otto</td>
      <td>@mdo</td>
      <td><a href="/edit-link.php">Edit</a></td>
   
    </tr>
    <tr>
      <th scope="row">Week number 6</th>
      <td>2019-02-01</td>
      <td>Thornton</td>
      <td>-</td>
      <td><a href="/edit-link.php">Edit</a></td>

    </tr>
    <tr>
      <th scope="row">Week number 7</th>
      <td>2019-02-01</td>
      <td>the Bird</td>
      <td>@twitter</td>
      <td><a href="/edit-link.php">Edit</a></td>

    </tr>
  </tbody>
</table>
<p>
etc...
</p>
</p>

使用 moment.js 这就是我所做的一切......

var months = [];

for( var i = 0; i < 12; i++ ){
months.push( new Date(0,i).toLocaleString({},{month:'long'}) ); 
}

console.log(months);

【问题讨论】:

  • 你有没有试过自己做这个?
  • 第一篇文章已更新。老实说,我不擅长 javascript。

标签: javascript jquery html momentjs


【解决方案1】:

我很快就为你写了一些东西。这应该足以让您继续前进:

    var thisYear = 2018;
    var start = new Date("1/1/" + thisYear);
    var defaultStart = moment(start.valueOf());
    var weekNumber = 1;
    this.months = [];
    for (var i = 0; i < 12; i++) {
        var weeks = [];

        var currentMonth = defaultStart.month();

        var monthLimit = i + 1;

        if (defaultStart.month() == 11) {
            monthLimit = 0;
        }

        while (defaultStart.month() != monthLimit) {
            weeks.push(
                {
                    weekNumber: weekNumber,
                    firstDayOfWeek: defaultStart.format("MMM Do YYYY")
                }
            )
            weekNumber++;

            defaultStart.add(7, 'days')
        }
        this.months.push(
            {
                weeks: weeks,
                month: moment().month(currentMonth).format("MMMM")
            });
    }

这将为您创建一个包含 12 个对象的数组(months 数组);这个对象将包含月份的名称和一个周对象数组,其中包括周数和一周的第一个日期。

查看this SlackBlitz 示例,该示例使用上面代码中使用KnockOutJS 库生成的数据来显示表格。

【讨论】:

  • 非常感谢!你知道如何制作表格以便我可以从 mysql 中为这些列添加数据吗?
  • 您希望将其添加到周数组中;我正在做weeks.push{object}),您需要将数据添加到该对象。
  • 你能举个例子吗?如果我每行添加“编辑”按钮(周数组)
  • 好吧,如果您想继续使用 KnockOut(我会推荐),那么您应该为每一行添加按钮。您不需要将新项目添加到数组中,只需在 html 中添加一个新字段。看看this 示例 SlackBlitz。
猜你喜欢
  • 2012-05-19
  • 2014-07-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多