Используя дату начала, как вывести определенную дату из даты начала в javascript в классе для вывода количества лет - PullRequest
0 голосов
/ 15 января 2020

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

Однако я не знаю, как сохранить начальную дату «клиентов» в методе получения. Тогда после этого я не уверен, как преобразовать разницу этих дат в просто годы.

Любая помощь будет благодарна!

Вот кусок кода, над которым я работаю:

  class Customer extends Person{
constructor(id_number, first_name, last_name, email_address, customer_start_date){
super(id_number, first_name, last_name);
this.email_address = email_address;
this.customer_start_date = customer_start_date;



  }
  get email_address(){
    return this.email_address;
  }
  get customer_start_date(){
    customer_start_date = new Date(2018, 11, 22);
    return this.customer_start_date;
  }

}

let s2 = new Staff(123577, "Steve", "Smith", "stevesmith@work.com", (2018, 11, 22));
console.log(s2.first_name , "has been a customer for this many years: ", s2.customer_start_date);

1 Ответ

0 голосов
/ 17 января 2020

Дата начала может быть сохранена как собственность клиента. Значением может быть строка типа «2016-07-23» или значение времени, например 1469232000000, или любое другое, которое лучше всего подходит для внутреннего хранилища. Я бы соблазнился сделать все как UT C, чтобы избежать путаницы с часовым поясом и летним временем.

Обратите внимание, что встроенный синтаксический анализатор должен рассматривать «2016-07-23» как UT C, см. Почему Date.parse дает неверные результаты?

Ниже приведен простой пример, демонстрирующий концепцию.

class Person {
  constructor (id, firstName, lastName) {
    this.id = id;
    this.firstName = firstName;
    this.lastName = lastName;
  }
}

class Customer extends Person {
  constructor (id, firstName, lastName, startDate) {
    super(id, firstName, lastName);
    this.startDate = startDate;
  }
  
  // Simplistic example, production function should be much more sophisticated
  get customerYears() {
    return Math.round((Date.now() - new Date(this.startDate)) / (365.25 * 8.64e7));
  }
}

let p = new Customer(0, 'Pete', 'Smith', '2017-01-16');

console.log(`${p.firstName} has been a customer since ${p.startDate}, which is about ${p.customerYears} years.`);

Метод customerYears преднамеренно упрощен c, вы должны использовать то, что подходит из Разница между двумя датами в годах, месяцах, дней в JavaScript или в библиотеке, включающей арифметику даты c функций.

...