首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >DateTime (和数字)在Blazor中的本地化

DateTime (和数字)在Blazor中的本地化
EN

Stack Overflow用户
提问于 2019-12-29 20:35:40
回答 3查看 8.7K关注 0票数 6

我的工作是基于最新的核心3.1的Blazor项目。

UI区域性正确地显示图像中所显示的日期和数字。

但是,在我使用EditForm的那一刻,数字和日期就没有按应有的格式格式化。

所以这个代码是EditForm的一部分

代码语言:javascript
运行
复制
<InputDate id="date" class="form-control" @bind-Value="@TaskObject.Date" />

因此,在EditForm中,它看起来是这样的,这是不正确的区域性格式:

但是在UI中如下所示,这是可以的:

当我刚在Blazor工作时,我试着在网上阅读不同的东西,以获得一些关于这个问题的知识。

因此,我厌倦了以下几点:

没有运气。

然后,我试着阅读,发现没有使用Core3.1。

我的问题是,应该做些什么来使EditForm显示日期和数字类似于UI,以及为什么EditForm会发生这种情况?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-12-30 09:19:25

为什么EditForm会发生这种情况?

内置的InputDate/InputNumber是作为InputDate组件设计的。见InputDate源代码InputNumber

要让EditForm显示日期和数字,比如UI,应该做些什么,

我想我们可以创建一个定制的InputDate<TValue>实现。然而,我错了。根据MDN

显示日期是根据用户浏览器的区域设置格式化的,但解析的值总是格式化为yyyy.

即使我们有一个定制的InputDate<TValue>实现来尊重当前的CultureInfo,我们仍然需要一些js/css来显示正确的格式。海事组织,没有标准的方法来实现这一点。另见这根线在所以

票数 5
EN

Stack Overflow用户

发布于 2019-12-30 08:04:22

这不是一个Blazor问题,而是type="date"的HTML元素的行为。

type="date"所需的type="date"是Blazor组件使用的"yyyy-MM-dd"。任何其他格式都无效。

如果我们做一个小小的测试,我们可以验证它不是一个Blazor问题。

代码语言:javascript
运行
复制
@page "/dates"
@using System.Globalization
<h3>Date</h3>
<p>@_dateString</p>
<input type="date" value="@_dateString" />
@code {
    private string _dateString;

    protected override void OnInitialized()
    {
        // using en-US culture
        // this is what InputDate component does
        _dateString = DateTime.Now.ToString("yyyy-MM-dd", CultureInfo.InvariantCulture);
    }
}

_dateString输出2019-12-30,但<input>中显示的日期是30/12/2019

有关type=date的详细信息可以找到这里。在Value部分中有一个注释,说明如下:

显示的日期格式将与实际值不同-显示日期是根据用户浏览器的区域设置格式化的,但解析的值总是格式化为yyyy dd。

因此,格式设置固定在用户浏览器的区域设置上。

票数 2
EN

Stack Overflow用户

发布于 2021-02-15 15:32:52

我建议使用这个组件https://blazorrepl.com/repl/wbambCPv20P0pX1h21

编辑:如果链接不工作,下面是代码:

代码语言:javascript
运行
复制
<style>
    #myInput[type="date"] {
        margin-top: 3px;
        border: 0;
        position: absolute;
        width: 24px;
        height: 24px;
    }

        #myInput[type="date"]::-webkit-inner-spin-button {
            display: none;
        }

        #myInput[type="date"]::-webkit-calendar-picker-indicator {
            margin: 0;
            position: absolute;
        }

    #myInput[type=date]::-webkit-datetime-edit,
    #myInput[type=date]::-webkit-datetime-edit-fields-wrapper {
        -webkit-appearance: none;
        display: none;
        margin: 0;
        padding: 0;
    }
</style>
<input value="@this.Value.ToString(this.Format)" @onchange="this.DateChangedAsync" class="@Class" style="display:inline-block;margin-right: -38px;" />
<input id="myInput" type="date" value="@Value" @onchange="this.DateChangedAsync" style="display:inline-block; " />

@code {
    [Parameter]
        public string Format { get; set; }

        [Parameter]
        public DateTime Value { get; set; }

        [Parameter]
        public EventCallback<DateTime> ValueChanged { get; set; }

        [Parameter]
        public string Class { get; set; }

        protected override void OnParametersSet()
        {
            if (string.IsNullOrWhiteSpace(Format))
            {
                this.Format = "dd/MM/yyyy";
            }
        }

        private async Task DateChangedAsync(ChangeEventArgs args)
        {
            string text = args.Value.ToString();

            if (string.IsNullOrWhiteSpace(text))
            {
                return;
            }

            this.Value = DateTime.Parse(text);
            await this.ValueChanged.InvokeAsync(this.Value);
        }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59523054

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档