在 MVC 控制器中将 Javascript 时间字符串转换为 DateTime 或 TimeSpan

Posted

技术标签:

【中文标题】在 MVC 控制器中将 Javascript 时间字符串转换为 DateTime 或 TimeSpan【英文标题】:Convert Javascript time string to DateTime or TimeSpan in MVC Controller 【发布时间】:2014-02-10 05:27:12 【问题描述】:

javascript 字符串“5:00 PM”发送到 MVC 控制器时,如何将其转换为 DateTime 或 TimeSpan。我正在使用

引导时间选择器

 // usage      
 <script type="text/javascript">
        $('#timepicker1').timepicker();
 </script>

Javascript 负载


  Skip: 0
  Status: []
  Take: 15
  DueTime: "1:00 PM" // keep in mind that this is a string

服务器对象类似于

class TimeSheet

   public TimeSpan DueTime;

【问题讨论】:

A TimeSpan 代表两个时间之间的跨度——一个增量或差异——它并不意味着实际存储时间点信息。 IMO,您的 DueTime 属性应该是 DateTime 结构。您可以将字符串传递给服务器并使用方法shown in this question在服务器端解析它。 【参考方案1】:

使用DateTime.Parse。当您的字符串随时间传输时,在服务器(在控制器上)进行转换。 http://msdn.microsoft.com/ru-ru/library/system.datetime.parse(v=vs.110).aspx

【讨论】:

应该有一个 SO 语言过滤器,可以将 MSDN 链接转换为登录用户的语言环境:)【参考方案2】:

好的,所以我读错了,因此删除了答案..!

但我不会放弃;)

您的 bootstrap-timepicker 会给您一个“下午 1:00”的时间。

但在此之前,我们将在服务器端查看我们可以解析成日期时间对象的内容。

这是用于解析日期时间的 C#。

string dateString, format;  
DateTime result;
CultureInfo provider = CultureInfo.InvariantCulture;

dateString = "15/08/2000 16:58"
format = "dd/MM/yyyy HH:mm"
result = DateTime.ParseExact(dateString, format, provider);

现在,当您看到您的字符串看起来不像那样时,我将假设您想要 今天的日期

这是我在转换为 24 小时时钟时经常使用的功能。

function ConvertTimeformat(str) 
    var time = str;
    var hours = Number(time.match(/^(\d+)/)[1]);
    var minutes = Number(time.match(/:(\d+)/)[1]);
    var AMPM = time.match(/\s(.*)$/)[1];
    if (AMPM == "PM" && hours < 12) hours = hours + 12;
    if (AMPM == "AM" && hours == 12) hours = hours - 12;
    var sHours = hours.toString();
    var sMinutes = minutes.toString();
    if (hours < 10) sHours = "0" + sHours;
    if (minutes < 10) sMinutes = "0" + sMinutes;

    //Creating the todays date in the right format
     var today = new Date();
     var dd = today.getDate();
     var mm = today.getMonth()+1;//January is 0!`
     var yyyy = today.getFullYear();
     if(dd<10)dd='0'+dd
     if(mm<10)mm='0'+mm
     var todaysdate = dd+'/'+mm+'/'+yyyy +" " ; //<--I added an extra space!
     var hoursNminutes = sHours + ":" + sMinutes
     //CREATE THE RIGHT FORMAT FOR DATE.PARSEXACT "dd/MM/yyyy HH:mm"
      var dateToParse = todaysdate + hoursNminutes 
    return dateToParse;

要使用该功能,请这样做!

//Call it and provide your bootstrap time. And make it return to a variable
var dateToBeSentToServer = ConvertTimeformat("1:00 PM");
//OR With the bootstraptime as a variable 
var dateToBeSentToServer = ConvertTimeformat(timevariable);

现在您可以将 dateToBeSentToServer 发送到您的服务器端进行解析

【讨论】:

您能解释一下您将如何从“下午 1:00”到纪元时间吗? 我正在使用 bootstrap-timepicker,我会在 bootstrap 函数中这样做吗? 我不想将它作为字符串发送到服务器端,这看起来像是一个肮脏的工作。

以上是关于在 MVC 控制器中将 Javascript 时间字符串转换为 DateTime 或 TimeSpan的主要内容,如果未能解决你的问题,请参考以下文章

如何在 C# 中将数据发送到 ASP.NET Core MVC 控制器?

在 mvc JavaScript 中的下拉更改选择上加载列

在 MVC 中将数据从视图传递到控制器时,数据列表变为空

在 Spring MVC 中将 Bean 放入控制器的问题

如何在 Spring-MVC 中将数据从视图传递到控制器?

在 asp.net mvc razor 应用程序中将 Datetime C# 类型转换为 Date javascript