Как я могу получить правильный день недели, если я устанавливаю дату относительно заданных параметров строки запроса? - PullRequest
1 голос
/ 22 апреля 2019

У меня возникли некоторые проблемы при настройке правильного дня недели, я использую параметр строки запроса, который связан с календарем, и я хочу использовать выбранную дату для другого сценария, который подходит, за исключением того, что я могуустановить правильный день.Параметр строки запроса имеет следующий формат: дд / мм / гггг, и с учетом этих данных я тоже пытаюсь получить правильный день.

    this.f = new Date();

    this.f.setDate = getUrlParameter('date').split("/")[0];
    this.f.setMonth = getUrlParameter('date').split("/")[1];
    this.f.setFullYear = getUrlParameter('date').split("/")[2];
    console.log(this.setMonth);

    this.days = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"];
    this.months = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];
    console.log(this.months[this.setMonth]);

1 Ответ

1 голос
/ 22 апреля 2019

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

function getUrlParameter() {
  return '12/04/2019';
}

// Replace this with plain obj
var obj = {};

obj.f = new Date();

// Call methods, don't assign to properties
// The set* methods set values
obj.f.setDate(getUrlParameter('date').split("/")[0]);

// Subtract 1 from calendar month number as EMCScript months are zero based, April is 3
obj.f.setMonth(getUrlParameter('date').split("/")[1] - 1);
obj.f.setFullYear(getUrlParameter('date').split("/")[2]);

// The get* methods get values
// Use getMonth to get the month
console.log(obj.f.getMonth());

obj.days = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"];
obj.months = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];

console.log(obj.months[obj.f.getMonth()]);

Однако установка свойств по одному может привести к ошибкам, например, если месяц создан в апреле, и вы пытаетесь установить дату на 31 мая, то, если дата установлена ​​на 31, она станет 1 мая (потому что нет 31 апреля), поэтому у вас будет дата на 1 мая не 31 мая. Поэтому установите все значения за один раз:

let obj = {f: new Date()};
// Get date parta
let [day, month, year] = '31/05/2019'.split('/');

// Set values in one go
obj.f.setFullYear(year, month - 1, day);

console.log(obj.f.toLocaleDateString());

// But better to create the date with the right values
// from the start
let [day2, month2, year2] = '31/05/2019'.split('/');
let obj2 = {f: new Date(year2, month2 - 1, day2)};

console.log(obj2.f.toLocaleDateString());
...