Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 16.01.2018, 02:13
Новичок на форуме
Отправить личное сообщение для dany2855 Посмотреть профиль Найти все сообщения от dany2855
 
Регистрация: 06.01.2018
Сообщений: 8

изменение времени
Помогите найти ошибки , пожалуйста!!
var time = date('2012-01-11 12:35')
    .add(24, 'hours')
    .subtract(1, 'months')
    .add(3, 'days')
    .add(15, 'minutes');

      arr = date.split(/[\s:-]/);
     
         objTime = {
          newDate: new Date (arr[0], arr[1] - 1, arr[2], arr[3], arr[4]),
        
          add: function (value, string) {

            if (value > 0) {
               if (string == 'years') {
                this.newDate.setFullYear(value + +arr[0]);
                return this;
               }
               else if (string == 'months') {
                this.newDate.setMonth(value + +arr[1]);
                return this;
               }
               else if (string == 'days') {
                this.newDate.setMonth(arr[1] - 1, value + +arr[2]);
                return this;
               }
               else if (string == 'hours') {
                this.newDate.setHours(value + +arr[3]);
                return this;
               }
               else if (string == 'minutes') {
                this.newDate.setMinutes(value + +arr[4]);
                return this;
               } else {
                return TypeError('Передано неверное значение')
               }
            } else {
              return TypeError('Передано неверное значение');
            }
        },

        substract: function (value, string) {
          if (value > 0) {
             if (string == 'years') {
              this.newDate.setFullYear(+arr[0] - value);
              return this;
             }
             else if (string == 'months') {
              this.newDate.setMonth(+arr[1] - value);
              return this;
             }
             else if (string == 'days') {
              this.newDate.setMonth(arr[1] - 1, +arr[2] - value);
              return this;
             }
             else if (string == 'hours') {
              this.newDate.setHours(+arr[3] - value);
              return this;
             }
             else if (string == 'minutes') {
              this.newDate.setMinutes(+arr[4] - value);
              return this;
             } else {
              return TypeError('Передано неверное значение')
             }
          } else {
            return TypeError('Передано неверное значение');
          }
        }
      }

     return objTime.newDate;
Ответить с цитированием
  #2 (permalink)  
Старый 16.01.2018, 06:24
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,064

Сообщение от dany2855
substract(1, 'months')
Ответить с цитированием
  #3 (permalink)  
Старый 16.01.2018, 16:19
Новичок на форуме
Отправить личное сообщение для dany2855 Посмотреть профиль Найти все сообщения от dany2855
 
Регистрация: 06.01.2018
Сообщений: 8

Спасибо, не заметил.
Но ошибка идет еще раньше, после первого .add не возвращается объект.
"date(...).add is not a function'. В чем может быть проблема?
Ответить с цитированием
  #4 (permalink)  
Старый 16.01.2018, 16:25
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,064

dany2855,

function Time(str) {
    var objTime = {
        init: function(str) {
            var arr = str.split(/[\s:-]/);
            this.newDate = new Date(Date.UTC(arr[0], arr[1] - 1, arr[2], arr[3], arr[4], 0, 0));
            return this;
        },
        add: function(value, string) {
            if (string in this.method) {
                return this.setValue(value, this.method[string]);
            } else {
                throw new Error("Передано неверное значение: " + string);
            }
        },
        method: {
            "years": "FullYear",
            "months": "Month",
            "days": "Date",
            "hours": "Hours",
            "minutes": "Minutes"
        },
        setValue: function(value, method) {
            this.newDate["setUTC" + method](value + this.newDate["getUTC" + method]());
            return this;
        },
        substract: function(value, string) {
            return this.add(-value, string);
        },
        toString: function() {
          return this.newDate.toLocaleString("ru",{timeZone : "UTC"});
        },
        valueOf: function() {
            return +this.newDate
        }
    };
    return objTime.init(str);
};

var str = "2012-01-11 12:35";
var time = new Time(str);
time.add(24, "hours").substract(1, "months").add(3, "days").add(15, "minutes");
alert(time);
alert(+time);
Ответить с цитированием
  #5 (permalink)  
Старый 17.01.2018, 03:36
Новичок на форуме
Отправить личное сообщение для dany2855 Посмотреть профиль Найти все сообщения от dany2855
 
Регистрация: 06.01.2018
Сообщений: 8

Рони, спасибо большое очень помогли! Подскажите еще, пожалуйста, как правильно задать формат отображения даты, мой вариант не рабочий(
toString: function() {
          return this.newDate.toString.ofPattern("YYYY‒MM‒DD HH:SS",new Locale ("ru"));
        },
Ответить с цитированием
  #6 (permalink)  
Старый 17.01.2018, 04:00
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,064

Сообщение от dany2855
как правильно задать формат отображения даты
написать функцию, которая формирует эту строку или не велосипедить
http://momentjs.com/
Ответить с цитированием
  #7 (permalink)  
Старый 17.01.2018, 04:22
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,064

dany2855,
function Time(str) {
    var objTime = {
        init: function(str) {
            var arr = str.split(/[\s:-]/);
            this.newDate = new Date(Date.UTC(arr[0], arr[1] - 1, arr[2], arr[3], arr[4], 0, 0));
            return this;
        },
        add: function(value, string) {
            if (string in this.method) {
                return this.setValue(value, this.method[string]);
            } else {
                throw new Error("Передано неверное значение: " + string);
            }
        },
        method: {
            "years": "FullYear",
            "months": "Month",
            "days": "Date",
            "hours": "Hours",
            "minutes": "Minutes"
        },
        setValue: function(value, method) {
            this.newDate["setUTC" + method](value + this.newDate["getUTC" + method]());
            return this;
        },
        substract: function(value, string) {
            return this.add(-value, string);
        },
        toString: function() {
     var year = this.newDate.getUTCFullYear();
     var month = this.newDate.toLocaleString("ru",{timeZone : "UTC",month: '2-digit'});
     var day = this.newDate.toLocaleString("ru",{timeZone : "UTC",day: '2-digit'});
     var time = this.newDate.toLocaleString("ru",{timeZone : "UTC", hour: '2-digit', minute: '2-digit' });
     return year + "-" + month + "-" + day + " "+time

        },
        valueOf: function() {
            return +this.newDate
        }
    };
    return objTime.init(str);
};

var str = "2012-01-11 12:35";
var time = new Time(str);
time.add(24, "hours").substract(1, "months").add(3, "days").add(15, "minutes");
alert(time);
alert(+time);
Ответить с цитированием
  #8 (permalink)  
Старый 19.01.2018, 05:11
Новичок на форуме
Отправить личное сообщение для dany2855 Посмотреть профиль Найти все сообщения от dany2855
 
Регистрация: 06.01.2018
Сообщений: 8

Рони, спасибо, за время, которое вы уделили! не могу разобраться только с еще одним вопросом. Если в задании не строка str. а объект
var str=date("2012-01-11 12:35")
, нужно приводить date к строке через toString?
var str=new String(date);
return str.toString();
Заранее большое спасибо!
Ответить с цитированием
  #9 (permalink)  
Старый 19.01.2018, 05:38
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,064

dany2855,
function Time(str) {
    var objTime = {
        init: function(str) {
            if(str instanceof Date) this.newDate = str;
            else {
            var arr = str.split(/[\s:-]/);
            this.newDate = new Date(Date.UTC(arr[0], arr[1] - 1, arr[2], arr[3], arr[4], 0, 0));
            }
            return this;
        },
        add: function(value, string) {
            if (string in this.method) {
                return this.setValue(value, this.method[string]);
            } else {
                throw new Error("Передано неверное значение: " + string);
            }
        },
        method: {
            "years": "FullYear",
            "months": "Month",
            "days": "Date",
            "hours": "Hours",
            "minutes": "Minutes"
        },
        setValue: function(value, method) {
            this.newDate["setUTC" + method](value + this.newDate["getUTC" + method]());
            return this;
        },
        substract: function(value, string) {
            return this.add(-value, string);
        },
        toString: function() {
     var year = this.newDate.getUTCFullYear();
     var month = this.newDate.toLocaleString("ru",{timeZone : "UTC",month: '2-digit'});
     var day = this.newDate.toLocaleString("ru",{timeZone : "UTC",day: '2-digit'});
     var time = this.newDate.toLocaleString("ru",{timeZone : "UTC", hour: '2-digit', minute: '2-digit' });
     return year + "-" + month + "-" + day + " "+time

        },
        valueOf: function() {
            return +this.newDate
        }
    };
    return objTime.init(str);
};

//var str = "2012-01-11 12:35";
var str = new Date(Date.UTC(2012, 0, 11, 12, 35, 0, 0))
var time = new Time(str);
time.add(24, "hours").substract(1, "months").add(3, "days").add(15, "minutes");
alert(time);
alert(+time);
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Изменение значения переменной в режиме реального времени The_FactioN jQuery 3 09.03.2016 12:20
Динамическое изменение времени. iAlexandeR Events/DOM/Window 1 24.12.2015 10:56
Изменение div по времени tihonan Общие вопросы Javascript 4 06.08.2015 19:21
Изменение прорачности фона после n-го количества времени. SneQ AstC Общие вопросы Javascript 15 16.10.2014 20:38
Динамическое изменение времени Mutagena Общие вопросы Javascript 3 28.03.2012 12:13