Момент JS: момент (0) = ср 31 декабря 1969? - PullRequest
0 голосов
/ 25 сентября 2019

Я пытался сделать нулевую дату.поэтому я попытался сделать их все 0, когда я нажимал кнопку очистки.

 this.clear = function () {
            _this.newQuarters.forEach(function (_value, index) {
                _value.startDate = 0;
                _value.endDate = 0;
                _value.suppressAllocation = false;
                _value.quarters.forEach(function (_childValue, index) {
                    _childValue.startDate = 0;
                    _childValue.endDate = 0;
                    _childValue.suppressAllocation = false;
                });
            });
        };
    }

После этого я пытался добавить 0 в момент из другой функции.

 this.newQuarters.forEach(function (_value, index) {
            var startDate = moment(_value.startDate);

но, этоdisplay startDate = Wed 31 декабря 1969 г. Помогите мне найти, чтобы все даты были нулевыми.

Ответы [ 3 ]

7 голосов
/ 25 сентября 2019

При передаче числа в функцию moment() оно интерпретируется как метка времени unix.
Это число секунд с момента EPOCH или 01-01-1970.

Таким образом, передача 0 этой функции приводит к самой первой секунде 1 января 1970 года.
Как указывало Берги , вы, вероятно, отображаете даты в местном часовом поясе,что может привести к времени до 01-01-1970.

Если вы хотите создать нулевую дату, вы должны установить для startDate значение null и обработать ее правильно (с помощью оператора if).

Вы также можете установить дату обратно на текущее время, не передавая аргумента функции moment().

1 голос
/ 25 сентября 2019

С датами может быть сложно работать в приложении.Нет такого понятия, как время, которое не есть время.По крайней мере, не в мире программирования.По этой причине мы должны создать собственное понимание того, что будет нехватка времени.

Нет времени без времени , но нет значения .

Вы, очевидно, это понимаете, у вас был подход, в вашем случае вы, кажется,хорошо, когда время просто равно нулю, оно просто сломалось при работе с моментом, поскольку момент использует время EPOCH.Таким образом, ноль - это время.

Вам придется тестировать, как и всем нам.

this.newQuarters.forEach(function (_value, index) {
  var startDate = _value.startDate ? moment(_value.startDate) : null;

Нехватка времени может быть тем, что вы хотите, неопределенным, нулевым, датой начала

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

0 голосов
/ 26 сентября 2019

Если вы имеете дело с библиотекой momentjs, есть функция: invalid()

Вы можете легко сделать ваши переменные недопустимыми объектами момента и контролировать их достоверность.

let currentDate = moment(); // Valid moment object

console.log(currentDate.format());

// make the moment object invalid
currentDate = moment.invalid();

console.log(currentDate.isValid()); // Check validity
console.log(currentDate.format()); // Invalid date

// make the moment object valid again
currentDate = moment();

console.log(currentDate.isValid()); // Check validity
console.log(currentDate.format()); // A valid date
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.min.js"></script>
...