moment.isoWeekday - это не функция - PullRequest
1 голос
/ 25 апреля 2019

Я использую codesandbox, и снова появляется та же ошибка: 502: bad gateway.Глядя на терминал, это очевидно, потому что moment.isoWeekday не является функцией.Почему это так?

Я посмотрел на moment.js, и способ, которым я поместил его в мой код, по-видимому, верен.

var http = require("http");
var moment = require("moment");
moment().format();

function getDates() {
  var start = moment.utc("1st Jan 2019");
  var end = moment.utc("31st December 2019");
  var dates = [];
  var current = start.clone();

  if (current !== moment.isoWeekday(1)) {
    current = moment().add(1, "w");
  }
  while (current.isBefore(end)) {
    current.clone.push(dates);
    current = moment.add(2, "w");
  }

  return dates;
}

http
  .createServer(function(req, res) {
    res.writeHead(200, { "Content-Type": "text/plain" });
    res.write("day,date", "\n");
    var dates = getDates();
    for (var i = 0; i < dates.length; i++) {
      res.write(moment.format("dddd, Do MMMM YYYY", dates[i]), "\n");
    }
    res.end();
  })
  .listen(8080);

Я выполняю задачу, которая мне нужнавыводить даты.isoWeekday является частью кода, который должен проверять, не является ли день не Monday, затем добавляет неделю к переменной, поэтому она устанавливает на Monday на следующей неделе.

1 Ответ

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

В вашем коде есть пара ошибок:

  1. Вы забыли () после момента в moment.isoWeekday(1)
  2. Вывод moment.utc("1st Jan 2019") равен нулю, поскольку формат не распознается в данный момент, moment.utc("1st Jan 2019", "Do MMM YYYY") должен работать как ожидалось
  3. Чтобы поместить клон current в массив dates, вы должны сделать dates.push(current.clone()); вместо current.clone.push(dates);
  4. moment.format("dddd, Do MMMM YYYY", dates[i]) неверно, вы должны сделать dates[i].format("dddd, Do MMMM YYYY") вместо

Рабочий пример:

function getDates() {
  var start = moment.utc("1st Jan 2019", "Do MMM YYYY");
  var end = moment.utc("31st December 2019", "Do MMM YYYY");
  var dates = [];
  var current = start.clone();

  if (current.isoWeekday() !== 1) {
    //current = current.add(1, "w");
    const nextMonday = 1 + current.isoWeekday() + (7 - current.isoWeekday());
    current.day(nextMonday);
  }

  while (current.isBefore(end)) {
    dates.push(current.clone());
    current = current.add(2, "w");
  }

  return dates;
}

console.log("day, date");
var dates = getDates();
for (var i = 0; i < dates.length; i++) {
  console.log(dates[i].format("dddd, Do MMMM YYYY"));
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.min.js"></script>
...