Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/161.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 计算到今天的天数moment.js_Javascript_Jquery_Knockout.js_Momentjs - Fatal编程技术网

Javascript 计算到今天的天数moment.js

Javascript 计算到今天的天数moment.js,javascript,jquery,knockout.js,momentjs,Javascript,Jquery,Knockout.js,Momentjs,我有一个函数,可以计算到今天为止的天数。但是它可以工作,我正在使用moment.js从JSON数据中写入和格式化日期,我认为这会导致冲突。有没有一种方法可以使用moment.js做同样的事情 这是工作的JavaScript: 如何使用moment.js完成同样的事情 如果有兴趣,这里是我如何拉在日期时,它不工作 <span class="due-date" data-bind="textualDate: DueDate"></span> ko.bindingHandl

我有一个函数,可以计算到今天为止的天数。但是它可以工作,我正在使用moment.js从JSON数据中写入和格式化日期,我认为这会导致冲突。有没有一种方法可以使用moment.js做同样的事情

这是工作的JavaScript:

如何使用moment.js完成同样的事情


如果有兴趣,这里是我如何拉在日期时,它不工作

<span class="due-date" data-bind="textualDate: DueDate"></span>

ko.bindingHandlers.textualDate = {
    update: function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {
        var valueUnwrapped = ko.utils.unwrapObservable(valueAccessor());
        var textContent = moment(valueUnwrapped).format("MM/DD/YYYY");
        ko.bindingHandlers.text.update(element, function () { return textContent; });
    }
};

ko.bindingHandlers.textualDate={
更新:函数(元素、valueAccessor、allBindingsAccessor、viewModel、bindingContext){
var valueUnwrapped=ko.utils.unwrapObservable(valueAccessor());
var textContent=时刻(值未包装)。格式(“MM/DD/YYYY”);
update(元素,函数(){return textContent;});
}
};

如果您遇到的问题是使用moment.js获取两个日期之间的持续时间,那么您可以使用如下函数:

var a = moment([2007, 0, 29]);
var b = moment([2007, 0, 28]);
var diffInMs = a.diff(b); // 86400000 milliseconds
var diffInDays = a.diff(b, 'days'); // 1 day
现在,我不知道您是否对KnockoutJS有任何问题,但这应该可以确保您的计算是使用moment.js完成的

出于您的兴趣,我为自己制作了一个自定义绑定处理程序,用于显示前一刻的日期。与你的不同之处在于,我的可观察物体已经是瞬间物体。因此,我在这里对其进行了修改,使其能够与标准日期对象一起工作:

    ko.bindingHandlers.moment = {
        update: function(element, valueAccessor) {
            var value = valueAccessor();
            var formattedValue = moment(ko.utils.unwrapObservable(value)).format('MM/DD/YYYY');
            $(element).text(formattedValue);
        }
    };

编辑:我用这个例子给你做了一个例子。

对我有用-看这把小提琴-。如果你能给我们看一把小提琴,看看哪里有问题,这样我们就可以看到发生了什么

以下是我添加的代码:

var viewModel = {
    firstDate: ko.observable("2013-7-1"),
    secondDate: ko.observable("2013-9-1")
};
ko.applyBindings(viewModel);
我更新了您的标记以使用viewmodel:

<div id="paging1">
    <ul class="list paging-items">
        <li><!-- item -->
            <h4>Due in <span class="days-due"></span> days</h4>

            <h4><span data-bind="textualDate: firstDate" class="due-date"></span></h4>
        </li><!-- #item -->
        <li><!-- item -->
            <h4>Due in <span class="days-due"></span> days</h4>

            <h4><span data-bind="textualDate: secondDate" class="due-date"></span></h4>
        </li><!-- #item -->
    </ul>
</div>

  • 天内到期
  • 天内到期
请注意,对jQuery的
每个
方法的调用只能作用于DOM中已有的数据。所以一定要在调用
ko.applyBindings

然而


您可能想考虑使用计算而不是使用jQuery用于页面的“到期日”。您可以这样做:

“我正在使用moment.js从JSON数据编写和格式化日期,我认为这会导致冲突。”您为什么这么认为?计算日期和输出日期是完全不相关的操作。@alex23使用日期库有很多原因。日期/时间数学很难看,而且充满了边缘情况(可变的月长、时区、夏令时、闰年)。当我手动将日期输入html时,它可以工作。当我将数据绑定到html中时,它不起作用。这种计算让我感到有点紧张。并不是所有的日子都有24小时,有的有23小时,有的有25小时(还有其他类似的奇怪)。一天中的某个时间在
now
上,而不是
dateEnd
(现在是午夜),这将进一步扭曲结果。在这两者之间,我不能百分之百地确定
Math.round
是否为您排序…”“当我手动将日期放入html时,它是有效的。当我将数据绑定到html时,它不起作用。”在问题的代码/标记中(以及在小提琴中——我没有看到任何数据绑定——但不仅仅是在那里)。
<div id="paging1">
    <ul class="list paging-items">
        <li><!-- item -->
            <h4>Due in <span class="days-due"></span> days</h4>

            <h4><span data-bind="textualDate: firstDate" class="due-date"></span></h4>
        </li><!-- #item -->
        <li><!-- item -->
            <h4>Due in <span class="days-due"></span> days</h4>

            <h4><span data-bind="textualDate: secondDate" class="due-date"></span></h4>
        </li><!-- #item -->
    </ul>
</div>