Javascript 多格式引导数据采集器

Javascript 多格式引导数据采集器,javascript,backbone.js,datepicker,bootstrap-datepicker,Javascript,Backbone.js,Datepicker,Bootstrap Datepicker,我在表单中使用Backbone.js和 其目的是允许客户端使用'dd.mm.yyyy'格式,因此我在日期选择器上设置了该选项 self.$el.find('[data-role="invoicedate"]').datepicker({ format: "dd.mm.yyyy", todayBtn: "linked", todayHighlight: true, language: Application_language }); 然后,客户希望也允许“dd.m

我在表单中使用Backbone.js和

其目的是允许客户端使用'dd.mm.yyyy'格式,因此我在日期选择器上设置了该选项

self.$el.find('[data-role="invoicedate"]').datepicker({
    format: "dd.mm.yyyy",
    todayBtn: "linked",
    todayHighlight: true,
    language: Application_language
});
然后,客户希望也允许“dd.mm.yy”,并让它自动翻译,所以我做了以下操作:

invoicedateToModel: function() {
    var invoicedate = this.$el.find('[data-role="invoicedate"]').val();
    var re2 = /^(\d{2})\.(\d{2})\.(\d{2})$/;
    if (re2.test(invoicedate)) {
        invoicedate = invoicedate.replace(re2,"$1.$2.20$3");
    }
    var re4 = /^(\d{2})\.(\d{2})\.(\d{4})$/;
    if (re4.test(invoicedate)) {
        this.saveInvoiceDate(invoicedate);
        this.displayInvoiceDate();
        this.$el.find('[data-role="invoicedate"]').parent().toggleClass('has-error', false);
    } else {
        this.$el.find('[data-role="invoicedate"]').parent().toggleClass('has-error', true);
    }
},
并将其绑定到输入上的更改事件。我现在意识到这很好,因为dd.mm.yy适合dd.mm.yyyy格式,即它与dd.mm.yyyy格式并不矛盾

现在,客户机还希望能够将ddmmyyyy添加为条目选项,但是日期选择器会通过将新输入的日期替换为最后一个已知的正确日期或今天的日期来自动更正表单,因为在调用上述回调之前,ddmmyyyy与dd.mm.yyyy不匹配


有什么方法可以告诉引导datepicker多种允许的格式吗?

您可以将函数传递给datepicker的格式选项。对于真正灵活的解析,我使用了

从引导数据采集器:

toDisplay:将日期对象转换为字符串的函数(日期、格式、语言),该字符串将存储在输入字段中

toValue:将字符串对象转换为日期的函数(日期、格式、语言),用于日期选择

您可能需要使用
moment()
选项,但您应该能够将它带到您想要的地方。看看momentjs吧

$(".datepicker").datepicker({
  format: {
    toDisplay: function(date, format, language) {
      return moment(date).format("MM/DD/YYYY");
    },
    toValue: function(date, format, language) {
      return moment(date, ["DD.MM.YYYY", "DDMMYYYY"]).toDate();
    }
  }
});