Member 14056052 Ответов: 0

Не могли бы вы заглянуть в мой код, который вычисляет разницу между двумя датами без использования встроенного метода?


var obj = { 
  day: '', 
  month: '',
  year: ''
};
var months = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];

var countLeapYear  = function () {
  var y = this.year;
  if(this.month <= 2){
    y--;
  }
  return y/4-y/100+y/400;
};

var bound1 = countLeapYear.bind(obj);
var bound2 = getDifferenceDay.bind(obj);
function getDifferenceDay(Day1, Day2){
  var a = Day1.year*365 + Day1.day;
  for(var i=0; i<Day1.month - 1; i++ ){
    a += months[i];
    a += countleap(Day1);
  }
  var b = Day2.year*365 + Day2.day;
   for(var i=0; i<Day1.month - 1; i++ ){
    a += months[i];
    a += countleap(Day1);
  }
  return (b - a);
}

var Day1 = '1, 2, 2000';
var Day2 = '1, 2, 2004';
var obj1 = new getDifferenceDay();
console.log(obj1.getDifferenceDay(Day1, Day2));


Что я уже пробовал:

Я попытался вычислить дни между двумя датами без какого-либо встроенного метода javascript

W∴ Balboos, GHB

Вы его запустили? Это работает? Что вы хотите, чтобы мы сделали?

Не используя встроенные методы? Означает ли это разницу в датах или что - то связанное с датами?

Пожалуйста, измените свой вопрос на конкретный вопрос.

Member 14056052

Мне нужно вычислить разницу между двумя датами в javascript без использования встроенной библиотеки

Richard Deeming

Ну, это явно не сработает. Ваш getDifferenceDay функция ожидает два объекта с day, month, и year свойства; вы проходите через два strings, которые не обладают этими свойствами.

Функция getDifferenceDay возвращает число. Вы вызываете его как конструктор, а затем пытаетесь вызвать getDifferenceDay метод на этом возвращаемом значении, который не будет работать. Просто вызовите функцию напрямую.

Это также очень грязно. Какова цель этого проекта? obj переменная? А что это за двое bind звонки, предназначенные для выполнения?

Member 14056052

Спасибо, что ответили. Я пробовал это сделать но у меня уже есть Нэн
var Day1 = {
день 1: ",
месяц 1: ",
год 1: "
};
ВАР День2 = {
день2: ",
month2: ",
год2: "
};
ВАР месяцы = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];

var countLeapYear = функция () {
ВАР у = Этот.год1;
если(this.month <= 2){
y--;
}
возврат y/4-y/100+y/400;
};


var getDifferenceDay = функция (День1, День2){
var a = Day1.year1*365 + Day1.day1;
for(var i=0; i<Day1.month1 - 1; i++ ){
a += месяцы[i];
a += обратный отсчет(День1);
}
var b = Day2.year2*365 + Day2.day2;
for(var i=0; i<this.month1 - 1; i++ ){
a += месяцы[i];
a += обратный отсчет(День2);
}
возврат (b - a);
}

var Day1 = '1, 2, 2000';
var Day2 = '1, 2, 2004';
console.log(getDifferenceDay(Day1, Day2));

Не могли бы вы помочь мне, если это возможно

Richard Deeming

Еще раз:

То getDifferenceDay функция ожидает два параметра. В вашей обновленной функции первый параметр должен иметь вызываемые свойства day1, month1, и year1; второй параметр должен иметь вызываемые свойства day2, month2, и year2.

Вы проходите через два stringс.

То string класс[^] не содержит ни одного из этих свойств.

Вместо:

var Day1 = '1, 2, 2000';

тебе нужно:
var Day1 = { day1: 1, month1: 2, year1: 2000 };


Аналогичное изменение для Day2.

Member 14056052

На самом деле я хочу передать эту дату в качестве параметра в функцию. Вот почему он пуст. Мне нужно каждый раз менять код, чтобы получить разницу в дне.
Я хочу передать что-то вроде этого.

var Day1 = '1, 2, 2000';
var Day2 = '1, 2, 2004';
console.log(getDifferenceDay(Day1, Day2));

Richard Deeming

Я не знаю, как еще объяснить вам это: если вы передадите строковое значение типа '1, 2, 2000', затем этого не будет свойства дня, месяца и года.

Вам нужно передать объект, который обладает этими свойствами.

То, что вы делаете в данный момент, похоже на то, как вы фотографируете Феррари и пытаетесь забраться в него, чтобы покататься.

Member 14056052

Не могли бы вы изменить мой код, чтобы получить ожидаемый результат ?
На самом деле я новичок в javascript

Richard Deeming

Это должно исправить очевидные ошибки:

var months = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];

var countLeapYear = function (date) {
    var y = date.year;
    if (date.month <= 2){
        y--;
    }
    return y/4 - y/100 + y/400;
};

var getDifferenceDay = function (startDate, endDate){
    var a = startDate.year * 365 + startDate.day;
    for (var i = 0; i < startDate.month; i++) {
        a += months[i];
        a += countLeapYear(startDate);
    }
    
    var b = endDate.year * 365 + endDate.day;
    for (var i = 0; i < endDate.month; i++) {
        b += months[i];
        b += countLeapYear(endDate);
    }
    
    return b - a;
}

var day1 = { day: 1, month: 2, year: 2000 };
var day2 = { day: 1, month: 2, year: 2004 };
console.log(getDifferenceDay(day1, day2));

Меня все еще не убедила логика ваших расчетов. Но это твоя домашняя работа, так что тебе придется это исправить. :)

Member 14056052

Спасибо человеку за то, что он ответил на все вышесказанное.

Можно взять входное значение из html-формы

0 Ответов