【问题标题】:Binding bootstrap-datepicker to specific Datetime format将 bootstrap-datepicker 绑定到特定的日期时间格式
【发布时间】:2016-02-16 12:21:49
【问题描述】:

我在编辑模式下遇到日期格式问题。日期存储为 dd/MM/yyyy HH:mm:ss。我想在bootstrapdatetime picker 中绑定的日期应该具有格式 MM/dd/yyyy,但 viewmodel 的格式为 DateTime 为 dd/MM/yyyy,并将其发送到编辑视图。
我试图通过更改 CurrentCulture、CurrentUICulture 和 Parsing 等来更改格式。但没有成功。
Web-App 的 CurrentCulture 设置为“pt-BR”,但我更喜欢 datepicker 始终使用“en-US”文化,即使应用程序文化设置为“pt-BR”或任何其他文化。

型号:

[Column(TypeName = "datetime2")]
public DateTime? StartsOn { get; set; }

视图模型:

public DateTime? StartsOn { get; set; }

控制器:

CultureInfo provider = CultureInfo.CreateSpecificCulture("en-US");
string dateString1="";  
string lang="pt-BR";

dateString1 = entityVM.StartsOn.ToString();
var StartsOn = (DateTime.ParseExact(dateString1, "dd/MM/yyyy HH:mm:ss", provider)
                    .ToString("MM/dd/yyyy", provider));

var outputCulture = CultureInfo.CreateSpecificCulture("en-US");
var inputCulture = CultureInfo.CreateSpecificCulture(lang);

//Just for date format change to en-US culture, and then reset it to application culture
Thread.CurrentThread.CurrentCulture = outputCulture;
Thread.CurrentThread.CurrentUICulture = outputCulture;

//entityVM.StartsOn = (DateTime.ParseExact(StartsOn, "MM/dd/yyyy", outputCulture)); //ok, Format changed here

//Reset culture to pt-BR (application culture)
Thread.CurrentThread.CurrentCulture = inputCulture; // Problem! Format again changed here.
Thread.CurrentThread.CurrentUICulture = inputCulture;

这里是视图:

<div class='input-group date' data-provide="datepicker">
                        @Html.TextBox("StartsOn", Model.StartsOn, new { @class = "form-control", @id = "datetimepicker1", @type = "text", @required = true })
                        <span class="input-group-addon">
                            <span class="glyphicon glyphicon-calendar"></span>
                        </span>
</div> 

<script type="text/javascript">
            $(document).ready(function () {
                $('.datepicker').datepicker();

            });
</script>

问题是我总是得到 dd/MM/yyyy 而不是 MM/dd/yyyy。怎么转换成MM/dd/yyyy?

【问题讨论】:

    标签: c# asp.net-mvc datetime datepicker


    【解决方案1】:

    您需要为日期选择器指定日期格式:

    $('.datepicker').datepicker({
            dateFormat: 'mm/dd/yy'
        });
    

    【讨论】:

      【解决方案2】:

      日期选择器是否正确显示?您正在使用使用.datepicker 的日期选择器,但我看不到任何提到为datepicker 的类。你的意思是它显示不同的格式从模型填充它?

      【讨论】:

      • 是的,datepicker 根据他们的文档工作正常。目前它显示了 Viewmodel 所拥有的。我想在 Viewmodel 中更改日期时间的格式。
      • 好的,所以问题不在于 datepicker,razor 默认将数据类型的默认 .ToString() 格式绑定到文本框。一种简单的解决方案是在视图模型中使用string,在域模型中使用DateTime。这会有帮助吗?
      • 我也把类作为日期选择器。但问题是一样的。我使用 Auto-mapper,如果我接受您的建议,它将被添加工作。
      • 我的意思是:Model to ViewModel: string startOn = m.StartOn.ToString("dd/MM/yyyy HH:mm:ss") and ViewModel to Model: bool success = DateTime.TryParseExact(model.StartOn, myformat, CultureInfo.InvariantCulture, DateTimeStyles.None, out m.StartOn)
      【解决方案3】:

      您的视图模型是正确的,而不是 dd/MM/yyyy。 dd/MM/yyyy, MM/dd/yyyy ...都是“显示”格式。基础价值是 DateTime?并且独立于显示格式。 使用 jquery ui datepicker,默认显示格式(dateFormat)已经是“mm/dd/yy”。使用 bootstrap datepicker 格式为:“mm/dd/yyyy”(这也是默认设置)。

      我认为您的问题是,您将日期时间值转换为字符串,然后解析回日期时间。我不知道你为什么这样做。如果你愿意这样做,你为什么不也做 ToString("dd/MM/yyyy HH:mm:ss")?

      dateString1 = entityVM.StartsOn.ToString("dd/MM/yyyy HH:mm:ss");
      var StartsOn = (DateTime.ParseExact(dateString1, "dd/MM/yyyy HH:mm:ss", provider)
              .ToString("MM/dd/yyyy", provider));
      

      恕我直言,这是完全不必要的转换。它应该是:

      var StartsOn = entityVM.StartsOn;
      //or:
      var StartsOn = (DateTime)entityVM.StartsOn;
      

      【讨论】:

      • 但是你的建议没有给出 MM/dd/yyyy 格式。我的代码给出了这个,虽然它是一个字符串。然后我将它解析为日期时间,它也可以工作,但是当我重置文化时,由于 pt-BR 默认文化,它再次自动转换为 dd/MM/yyyy。
      • 我不明白你在这里的意思。您使用引导日期选择器上的“格式”设置显示格式。它的默认值是 mm/dd/yyyy,如果您愿意,可以将其设为 MM/dd/yyyy。我告诉你,在控制器方面,它以 DateTime? 的形式出现,你不应该将它转换为字符串然后再返回日期时间。
      • 好的,我删除了控制器中日期格式的所有额外代码以及其中的“文化更改”代码。所以它现在是 dd/mm/yyyy HH:mm:ss 格式。在视图中,我手动将默认日期选择器格式设置为 mm/dd/yyyy。但它仍然显示为 dd/mm/yyyy 00:00:00 格式。当我单击 datepicker 文本字段中的日期时,它会显示正确的格式。日期也不一样。这是我点击 datepicker 的日期。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-09-20
      • 1970-01-01
      • 2018-04-08
      • 2018-01-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多