【问题标题】:Changing date format from dd/mm/yyyy to yyyy-mm-dd in knockout.js在 knockout.js 中将日期格式从 dd/mm/yyyy 更改为 yyyy-mm-dd
【发布时间】:2020-09-29 17:02:12
【问题描述】:

我没有使用 knockout.js 的经验。我继承了一个使用淘汰赛和 C# ASP.NET 混合的预订表格。我们最近将数据库升级到了最新版本的 MySQL,与旧版本相比,它对输入日期的格式更加讲究。在大多数情况下,我可以通过调整 C# 或 SQL 来解决这个问题,但在表单的一部分中我还没有找到解决方案。日期以 dd/mm/yyyy 格式预填充在表单输入中。我想将其更改为 yyyy-mm-dd 以便我可以使用日期输入而不是文本输入

有两个表单输入看起来像这样

<input type="text" size="10" maxlength="10" class="normaltext" data-bind="attr:{id:'returnDate-'+Id},value:FlightInfo.ReturnDate, enable:$root.FlightsAdvanced() == 'true' && !FlightInfo.OwnFlight()">

显然,另一个是出发日期。它们似乎是从 javascript 文件中的以下函数填充的。

function FlightInfo(depDate, retDate) {

 this.OwnFlight = ko.observable(false);
 this.FirstCode = ko.observable("");
 this.SecondCode = ko.observable("");
 this.DepartureDate = ko.observable(depDate);
 this.ReturnDate = ko.observable(retDate);
 this.ReqTransferIn = ko.observable(0);
 this.ReqTransferOut = ko.observable(0);
}

如果我将 ko.observable(retDate) 替换为硬编码日期,例如 2020-09-09,然后提交表单,那么它可以工作,但是如果我将相同的日期直接硬编码到文本输入中而不是 value:FlightInfo.ReturnDate 然后它没有 - 表单从敲除中获取错误格式的日期并引发错误。

我已尝试按照this question 中的建议使用 moment.js,但它对我不起作用。如何将 depDateretDate 重新格式化为 yyyy-mm-dd

【问题讨论】:

    标签: javascript knockout.js webforms


    【解决方案1】:

    使用moment.js是实现这一点的正确方法,在创建flightInfo时,应该像这样修改两个observable:

     this.DepartureDate = ko.observable(moment(depDate).format('YYYY-MM-DD'));
     this.ReturnDate = ko.observable(moment(retDate).format('YYYY-MM-DD'));
    

    如果这些更改未反映在您的文本输入中,那么如果您包含 moment.js 并以正确的方式激活,则应该进行调试。

    【讨论】:

    • 这是我尝试过的确切代码,它破坏了我的表单。我认为淘汰赛的版本很旧 - 2.1.0。我会尝试更新的版本,看看会发生什么。
    【解决方案2】:

    我最终在 C# 层通过将 .ToShortDateString() 的几个实例更改为 .ToString("yyyy-MM-dd") 解决了这个问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-05
      • 1970-01-01
      相关资源
      最近更新 更多