将knockout.js中的日期格式从dd/mm/yyyy更改为yyyy-mm-dd

q3aa0525  于 2022-11-10  发布在  其他
关注(0)|答案(2)|浏览(240)

我没有使用knockout.js的经验。我继承了一个混合使用knockout和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

jjhzyzn0

jjhzyzn01#

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

ie3xauqp

ie3xauqp2#

使用moment.js是实现这一点的正确方法,在创建flightInfo时,应如下修改两个可观察性:

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

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

相关问题