我怎样才能把所有的日子都排成一行

How can i make a calendar with all days in one row

How can i make a calendar with all days in one row

我已经搜索了很多这个答案,但我仍然没有找到一个合适的答案或解决这个问题的方法....

我相信很多人都这样做过,但是有人仍然没有解释他们是如何做到的,这真的很奇怪。

有没有人知道答案,请用 javaScript 或 TypeScript 来做!

How can i make a calendar with all days in one row

我们在 JQuery 图书馆或其他一些资源中看到的大部分 table 它们都是 7 days in 1 row table

我想在 1 行中看到 30 天而不是日历中的 7 天!

例子---

简单而缓慢的方式:

var
   startDate = new Date( 2015, 0, 1 )
   , numOfDays = 30
   , days = []
   ;

function addDay( date ) {
   date.setDate( date.getDate() + 1 );
}

while ( numOfDays-- ) {
   days.push( startDate.getDate() + '/' + ( startDate.getMonth() + 1 )
                                         + '/' + startDate.getFullYear() );
   addDay( startDate );
}
console.log( days.join() );

控制台结果:

1/1/2015,2/1/2015,3/1/2015,4/1/2015,5/1/2015,6/1/2015,7/1/2015,8/1/2015,9/1/2015,10/1/2015,11/1/2015,12/1/2015,13/1/2015,14/1/2015,15/1/2015,16/1/2015,17/1/2015,18/1/2015,19/1/2015,20/1/2015,21/1/2015,22/1/2015,23/1/2015,24/1/2015,25/1/2015,26/1/2015,27/1/2015,28/1/2015,29/1/2015,30/1/2015

我使用计数器进行了 30 次迭代。您可以将条件更改为一个月内的几天。 但我更喜欢使用儒略日,因为它比上面的方法更快。

好的,事实是您只需要一个具有特定格式的数组。让我们看看如何生成这个数组。

首先请允许我介绍一个库:Moment.js,将用于说明。也可以用纯JavaScript代替

var moment = require('moment');
var resultArray = [];

var util = {};

/** 
 * input:
 *   month [Number]
 * output:
 *   totalDays [String]
 */
util.getDaysOfMonth = function(month){
  month = +month;
  var totalDays = '31';

  if( /[469]|(11)/.test(month) ){
    totalDays = '30';
  } else if (month === 2) {
    totalDays = moment().isLeapYear() ? '29' : '28';
  }

  return totalDays;
}

// Get current month of the year
var month = moment().get('month') + 1;

// current year
var year  = moment().get('year');
var days  = util.getDaysOfMonth(month);
for(var i = 1; i <= days; i++) {
  var str = month + '/' + i + '/' + year;
  resultArray.push(str);
}

现在你可以用这个数组做格式化了。