我一直在SO和github中寻找一种解释,但找不到。 Array.fill()
周围有很多线程,但是似乎没有任何问题可以回答我的问题。
这样就可以了,
const dates = Array(this.props.totalDays).fill().map((e, i) => moment(this.props.selectedDate).day(i+1).format('DD-MM'))
。
在上面的语句this.props.totalDays
中,是一个数字,表示所选月份的天数。例如,从1月开始将是31,在2月,3月和4月将分别选择28和31.30。
this.props.selectedDate
是字符串格式的日期(例如:2018年1月1日代表1月,2018年3月1日代表3月等)
我的dates
数组以必选格式显示日期,当我选择1月为01-01、01-02,......直到01-31时。
现在,当我选择“二月”时,它变得混乱了,我却不明白为什么?
当我选择2月时,我的dates
数组将具有从01-29、01-30、01-31、01-02 ....一直到25-02的数组
现在,当我选择March
时,dates
数组将为26-02、27-02、28-02、01-03、02-03 ... 28-03
我一直在努力了解发生了什么并且失败了。
任何帮助将不胜感激。
谢谢
维克拉姆
答案 0 :(得分:2)
moment.day()
表示星期几,从0开始。我认为您想设置date()
来获取每月的某天。
let totalDays = 28
let selectedDate = '2018-02-01'
const dates = Array(totalDays)
.fill()
.map((e, i) =>
moment(selectedDate).date(i+1).format('MM-DD'))
console.log(dates)
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.2/moment.min.js"></script>
答案 1 :(得分:1)
我不觉得fill()是引起问题的部分。
在您的示例中,选择“二月”时,您没有期望的值,但有一个包含28个元素的数组。
选择“ 3月”时也一样,这次您确实有31个元素。
鉴于您描述中的信息,我想说问题出在代码的这一部分
moment(this.props.selectedDate).day(i+1).format('DD-MM')
您想在地图功能中做什么?您是否只是尝试用01 / 02、02 / 02、03 / 02,...等值填充数组?
在这种情况下,您不应使用两个不同但密切相关的变量。如果您可以访问选定的月份和选定的年份(对于leap年),则可以执行以下操作:
首先添加这两个助手功能
const zeroPadIfNeeded = aValue => ('0' + aValue).slice(-2)
const daysInMonth = (aYear, aMonth) => new Date(aYear, aMonth, 0).getDate()
然后填写日期数组
let dates = new Array(daysInMonth(this.props.selectedYear, this.props.selectedMonth)).fill().map((e, i) => zeroPadIfNeeded(i + 1) + '-' + zeroPadIfNeeded(this.props.selectedMonth))
selectedMonth从1月1日开始。
关于您现有的代码,如果您可以共享如何设置变量selectedDate的话,可以确定问题出在哪里,因为我坚信这是问题的出处。