изменение времени
Помогите найти ошибки :cray: , пожалуйста!!
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; |
Цитата:
|
Спасибо, не заметил.
Но ошибка идет еще раньше, после первого .add не возвращается объект. "date(...).add is not a function'. В чем может быть проблема? |
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); |
Рони, спасибо большое очень помогли! Подскажите еще, пожалуйста, как правильно задать формат отображения даты, мой вариант не рабочий(
toString: function() { return this.newDate.toString.ofPattern("YYYY‒MM‒DD HH:SS",new Locale ("ru")); }, |
Цитата:
http://momentjs.com/ |
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); |
Рони, спасибо, за время, которое вы уделили! не могу разобраться только с еще одним вопросом. Если в задании не строка str. а объект
var str=date("2012-01-11 12:35"), нужно приводить date к строке через toString? var str=new String(date); return str.toString();Заранее большое спасибо! |
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); |
Часовой пояс GMT +3, время: 08:28. |