将bootstrap-datepicker绑定到特定的日期时间格式

时间:2016-02-16 12:21:50

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

我在编辑模式下遇到日期格式问题。日期存储为dd / MM / yyyy HH:mm:ss。我要在bootstrapdatetime picker中绑定的日期应该具有格式MM / dd / yyyy,但是viewmodel的格式为DateTime为dd / MM / yyyy并将其发送到编辑视图。
我试图通过改变CurrentCulture,CurrentUICulture和Parsing等来改变格式。但是没有成功 Web-App的CurrentCulture被设置为“pt-BR”,但我总是将“en-US”文化用于datepicker,甚至将应用文化设置为“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?

3 个答案:

答案 0 :(得分:0)

您需要指定datepicker的日期格式:

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

您的viewmodel是正确的,而不是dd / MM / yyyy。 dd / MM / yyyy,MM / dd / yyyy ......都是&#34;显示&#34;仅格式化。基础价值是DateTime?并且与显示格式无关。 使用jquery ui datepicker,默认显示格式(dateFormat)已经是&#34; mm / dd / yy&#34;。使用bootstrap datepicker,格式为:&#34; mm / dd / yyyy&#34; (这也是默认值)。

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

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;