Kendo datepicker对两个不同时区的不同计算机表现得很奇怪

时间:2014-01-21 09:01:35

标签: date datetime kendo-ui kendo-asp.net-mvc kendo-datepicker

您好我们的Web应用程序使用简单的kendo datepicker。

$("#DateInput").kendoDatePicker({
        format: "dd/MM/yyyy",        
        culture: "en-GB",
        max: new Date()
    });

现在,当我们尝试在Javascript中获取datepicker值时,我的浏览器为我提供了日期格式 dd / MM / yyyy ,但我的同事的浏览器给了他 MM / dd / yyyy 。我们尝试使用相同的文化,你可以在kendo和我们的web.config中看到,我们将全球化设置如下所示。

<system.web>
    <globalization uiCulture="en-GB" culture="en-GB" />
</system.web>

我的电脑的日期格式和设置如下;

Region & Language format: English(United Kinddom)
Keyboard Layout: English(United Kingdom)
Long and Short Date format: dd MMMM yyyy
Timezone: GMT+6

我同事的日期格式和设置是;

Region & Language format: English(Australia)
Keyboard Layout: English(Australia)
Long and Short Date format: dd MMMM yyyy
Timezone: GMT+8

最后一点信息,我们正在使用Chrome进行测试。这可能是UTC的问题。 我想在两个场合使用“dd / MM / yyyy”的日期格式。任何可行的解决方案将受到高度赞赏。感谢。

2 个答案:

答案 0 :(得分:2)

尝试在渲染任何kendo小部件之前在页面顶部添加此代码:

kendo.culture("en-GB");

它应该强制使用en-GB文化在所有位置使用kendo小部件。

如果您正在使用ASP.MVC,我建议将其添加到“_Layout.cshtml”中,如:

<head>
...

    <script src="@Url.Content("~/Scripts/jquery/jquery-1.8.2.min.js")" type="text/javascript"></script>
    <script src="@Url.Content("~/Kendo/js/kendo.all.min.js")" type="text/javascript"></script>
    <script src="@Url.Content("~/Kendo/js/kendo.aspnetmvc.min.js")" type="text/javascript"></script>
    <script src="@Url.Content("~/Kendo/js/cultures/kendo.culture.pl-PL.min.js")"></script>
    <script src="@Url.Content("~/Kendo/js/cultures/kendo.culture.en-GB.min.js")"></script>
    <script src="@Url.Content("~/Kendo/js/cultures/kendo.culture.de-DE.min.js")"></script>

    <script type="text/javascript">
        kendo.culture("en-GB");
    </script>

    //widgets create scripts for your views if you write it here
</head>

有关全球化的详细信息,请访问以下链接:

http://docs.kendoui.com/getting-started/using-kendo-with/aspnet-mvc/globalization

答案 1 :(得分:0)

如果您打算将日期转换为所需的格式“dd / MM / yyyy”,并且如果您的kendo网格未在不同的地方为您提供正确的结果,请创建您自己的。有点像这样。

在Json:

var FixedDateFormat = "PlodDate: '" + (Date.getUTCDate() + 1) + "/" + (Date.getUTCMonth() + 1) + "/" + Date.getUTCFullYear() + " 00:00:00";

这里我在日期和月份上添加了1因为getUTCDate / Month从0开始。正如你在评论中所说,你接受日期为字符串,然后将其转换回DateTime所以我添加了时间“00: 00:00" 。

在MVC中:您可能需要执行以下操作来进行转换;

DateTime X = Convert.ToDateTime(PlodDate);

<强>更新

我在JS上有一个更好的解决方案。你正在用这样的东西读取datepicker值,对吧?

$("#YourDatePickerName").data("kendoDatePicker").value()

在这里,您可以告诉您的浏览器您想要使用的本地内容,如下所示

$("#YourDatePickerName").data("kendoDatePicker").value().toLocaleString("en-GB");

这将为每种文化产生完全相同的结果。

进一步更新

如果你想做Kendo的方式,那么你可以使用kendo.toString()。您可以查看here