修改函数以计算到新的一年,而不是返回值 12/33/2014

Amending the function to calculate into the new year and not return the value 12/33/2014

本文关键字:2014 一年 返回值 计算 函数 修改      更新时间:2023-09-26

我需要你的帮助。

似乎函数 this_week('end') 返回了一个错误的日期 12/33/2014 (mm/dd/yyyy),它应该正确读取:

2015/2/1

function this_week(x) {
    var today, todayNumber, fridayNumber, sundayNumber, monday, friday;
        today = new Date();
        todayNumber = today.getDay();
        mondayNumber = 1 - todayNumber;
        fridayNumber = 5 - todayNumber;
        if (x === 'start') {
            //var start_dd = today.getDate() + mondayNumber
            var start_dd = today.getDate()
            var start_mm = today.getMonth() + 1
            var start_yyyy = today.getFullYear()
            return start_mm + '/' + start_dd + '/' + start_yyyy
        }
        if (x === 'end') {
            var end_dd = today.getDate() + fridayNumber
            var end_mm = today.getMonth() + 1
            var end_yyyy = today.getFullYear()
            return end_mm + '/' + end_dd + '/' + end_yyyy
        }

}

需要做什么?

在增加或减少日期时,您必须使用Date对象。

function this_week(x) {
    
            var date, todayNumber, fridayNumber;
            date = new Date();
            todayNumber = date .getDay();
            mondayNumber = 1 - todayNumber;
            fridayNumber = 5 - todayNumber;
    
            if (x === 'start') {
                date.setDate(date.getDate()+ mondayNumber);
            }
            else if (x === 'end') {
                date.setDate(date.getDate()+ fridayNumber);
            }
    
            var end_dd = date.getDate().toString();
            end_dd = (end_dd.length == 2)?end_dd:"0"+end_dd;
            var end_mm = (date.getMonth() + 1).toString();
            end_mm = (end_mm.length == 2)?end_mm:"0"+end_mm;
            var end_yyyy = date.getFullYear().toString();
            return end_mm + '/' + end_dd + '/' + end_yyyy;
    }
    
    document.write(this_week('end'));

请注意,一月份的月份代码是0

对于更简单的版本:

function this_week(x,d) {
    var d = d || new Date(),
        offset = 0;
    
    switch (x){
        case 'start':
            offset = 1 - d.getDay();
            break;
        case 'end':
            offset = 5 - d.getDay();
            break;
    }
    d.setDate(d.getDate() + offset);
    return d;
}
var oE = document.getElementById('o'),
    tE = document.getElementById('t');
function $log(t){ oE.innerHTML += (t || '') + "'r'n"; }
function $fmt(d){ return [d.getMonth() + 1, d.getDate(), d.getFullYear() ].map(function(v){ return v < 10 ? '0' + v : v; }).join('/'); }
function c(el){ try { var d = new Date(el.value); tE.innerHTML = 'Start: ' + $fmt(this_week('start',d)) + '; End: ' + $fmt(this_week('end',d)); } catch (e) { tE.innerHTML = 'Invalid Date'; } }
$log( 'Fixed dates' );
var ds = [
  new Date(2014, 12 - 1, 29),
  new Date(2015, 1 - 1, 1)
];
for (var i = 0; i < ds.length; i++){
    $log( $fmt(ds[i]) + ' start &raquo; ' + $fmt(this_week('start', ds[i])) );
    $log( $fmt(ds[i]) + ' end &raquo; ' + $fmt(this_week('end', ds[i])) );
}
$log();
$log( 'Based on today:' );
$log( $fmt(this_week('start')) );
$log( $fmt(this_week('end')) );
$log();
$log('::All dates in mm/dd/yyyy format::');
<pre id="o"></pre>
<hr />
<input type="text" onchange="c(this);" placeholder="try me"><button>Try</button><span id="t"></span>

假设一整周可能在星期日或星期一开始,此函数涵盖以下两个方面:

function this_week(start, givendate, weekStartsOnsunday) {
  givendate = givendate && givendate instanceof Date ? givendate : new Date;
  var today = givendate.getDay(),
      isSunday = !weekStartsOnsunday && today < 1,
      diff = !start 
             ? (isSunday ? -2 : (5 - today))
             : (isSunday ? -6 : (1 - today));
  // set date to begin/end of week and return it formatted
  return (givendate.setDate(givendate.getDate() + diff), format(givendate));
}
// format mm/dd/yyyy with leading zero's using an Array and Array.map
function format(date) {
  return [ date.getDate(), 
           date.getMonth()+1, 
           date.getFullYear()
         ].map(function (v) {return v <10 ? '0'+v : v;})
          .join('/');
}
var log = Helpers.log2Screen;
// today and week starts on monday
log('`this_week()`: ', this_week());
log('`this_week(true)`: ',this_week(true));
// given date is sunday, week starts on monday
log('`this_week(false, new Date(''2015/01/04''))`: ', 
      this_week(false, new Date('2015/01/04')), ' (week ends on sunday)');
log('`this_week(true, new Date(''2015/01/04''))`: ', 
      this_week(true, new Date('2015/01/04')), ' (week ends on sunday)');
// given date is sunday, week starts on sunday
log('`this_week(false, new Date(''2015/01/04''), true)`: ', 
     this_week(false, new Date('2015/01/04'), true), ' (week starts on sunday)')
log('`this_week(true, new Date(''2015/01/04''), true)`: ', 
      this_week(true, new Date('2015/01/04'), true), ' (week starts on sunday)');
<script src="http://kooiinc.github.io/JSHelpers/Helpers-min.js"></script>