【问题标题】:Remove Time part out of Jquery UI DatePicker从 Jquery UI DatePicker 中删除 Time 部分
【发布时间】:2014-02-11 17:44:30
【问题描述】:

我知道这个问题已经被问过很多次了,相信我,我已经尽了一切努力让它发挥作用。

我有一个网站,您可以通过第三方提供商(Facebook、Twitter、Google+、Microsoft)注册或登录。在注册表中有一个字段,您应该在其中输入您的生日。

这是该字段的 ViewModel (RegisterViewModel):

    [Required]
    [DataType(DataType.Date, ErrorMessageResourceType = typeof(Resources), ErrorMessageResourceName = "IncorrectDateFormat")]
    [DisplayFormat(DataFormatString = "{0:MM/dd/yyyy}", ApplyFormatInEditMode = true)]
    public DateTime BirthDate { get; set; }

这是模型(UserViewModel):

    [Required]
    [DataType(DataType.Date)]
    public DateTime BirthDate { get; set; }

我正在使用自动映射器将这两个映射到我的控制器中。

在视图中,我正在渲染该字段:

       <div class="form-group">
            @Html.LabelFor(m => m.BirthDate, new { @class = "col-md-2 control-label" })

            <div class="col-md-10">
                <span class="input-icon">
                    @Html.TextBoxFor(m => m.BirthDate, new { @class = "form-control input-xlarge clearfix", @placeholder = @Resources.BirthDate })
                    @Html.ValidationMessageFor(model => model.BirthDate)
                    <i class="icon-calendar blue"></i>
                </span>
            </div>
        </div>

我使用 Html.TextBoxFor 而不是 EditorFor,因为 Chrome 会自动呈现 DatePicker,而我使用的是 Jquery datepicker。

这就是我在 JS 文件中设置 DatePicker 的方式:

//All birthdate will be datepickers!
$("#BirthDate").datepicker({ altFormat: 'MM/dd/yyyy'});

我有以下问题/意见:

案例 1 - 注册本地帐户) 完美运行!在 DatePicker 文本中,我只看到格式正确的日期。

案例 2 - 登录第三方提供商) 这是我的问题,我像这样从用户那里获取 facebook 的出生日期(Facebook 返回一个日期,如 MM/dd/yyyy 但显然是一个字符串,所以我将其转换为 DateTime:

var birthdateClaim = externalIdentity.Result.Claims.Single(c => c.Type == "urn:facebook:birthday").Value;

            var birthdate = DateTime.ParseExact(birthdateClaim, "MM/dd/yyyy", CultureInfo.InvariantCulture);


            var registerModel = new RegisterViewModel
                                {
                                    BirthDate = birthdate,
                                };

            return registerModel; 

当我登录用户时,我将他发送到一个视图,在该视图中他可以看到他的信息(从 Facebook 提取)并且他能够添加更多信息,但是日期选择器会随着时间的推移显示它!!!像这样:19/10/1978 12:00:00 a.m.(dd/MM/yyyy 时间)

我错过了什么???每当提供商发送生日时,我都不想显示时间。我该怎么办?有什么想法吗?

【问题讨论】:

    标签: javascript jquery facebook date datepicker


    【解决方案1】:

    DateTime 即使没有提供时间也会添加时间(正如名称 DateTIME 所暗示的那样)。您必须使用 toString 格式化日期。

    var birthdate = DateTime.ParseExact(birthdateClaim, "MM/dd/yyyy", CultureInfo.InvariantCulture).toString('MM/dd/yyyy');
    

    【讨论】:

    • 如您所见,birthdate 变量是 DateTime 类型,因此我无法将 ToString() 应用于 DateTime.ParseExact。
    • 嗯,没错。以后可以格式化吗?还是只用一个字符串来存储?
    • 不,我不能。之后 ViewModel 被渲染。
    猜你喜欢
    • 2014-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-29
    相关资源
    最近更新 更多