我在javascript中有当前日期,如下所示:
self.currentDate = ko.observable(new Date());
我想在yyyy-mm-dd中格式化日期并在Sammy内部使用,如下所示:
this.get('', function () { this.app.runRoute('get', '#'+self.currentDate()) });
有很多漫长的过程要做。但有没有办法轻松做到这一点。或者我可以在document.ready函数中使用它并在此处使用它。
答案 0 :(得分:2)
看看datejs。
这是一个Javascript日期库,它将处理您的格式转换。它扩展了toString方法,以便您可以完成以下内容: -
self.currentDate().toString('yyyy-M-d')
有几种与Knockout集成的选项,但上述内容将在返回yyyy-mm-dd格式时“正常工作”。
另一种仍在使用datejs的方法是将函数包装在ko.computed中: -
self.displayDate = ko.computed(function(){
return self.currentDate().toString('yyyy-M-d');
});
如果您不想使用datejs,您可以自己滚动并将其包装在计算中。
self.displayDate = ko.computed(function(){
var year = self.currentDate().getFullYear().toString();
var month = (self.currentDate().getMonth() + 1).toString();
var day = self.currentDate().getDay().toString();
var pad = "00";
return year + '-' +
pad.substring(0, pad.length, month.length ) + month + '-' +
pad.substring(0, pad.length, day.length ) + day;
});
但严重的是,先看看datejs。为什么重新发明轮子。在Sammy部分真的无法帮助你,soz。
答案 1 :(得分:0)
另一个选择是创建自定义绑定处理程序
更多信息:http://jason-mitchell.com/web-development/binding-dates-using-knockout-moment-js/
ko.bindingHandlers.date = {
update: function (element, valueAccessor, allBindingsAccessor, viewModel) {
var value = valueAccessor();
var allBindings = allBindingsAccessor();
var valueUnwrapped = ko.utils.unwrapObservable(value);
// Date formats: http://momentjs.com/docs/#/displaying/format/
var pattern = allBindings.format || 'DD/MM/YYYY';
var output = "-";
if (valueUnwrapped !== null && valueUnwrapped !== undefined && valueUnwrapped.length > 0) {
output = moment(valueUnwrapped).format(pattern);
}
if ($(element).is("input") === true) {
$(element).val(output);
} else {
$(element).text(output);
}
}
};
<div>
<label>Date of Birth:</label>
<input type="text" data-bind="date: dateOfBirth, format: 'DD MMM YYYY'" />
</div>
需要moment.js:http://momentjs.com/