我使用以下命令通过AJAX将日期传回我的MVC控制器:
date.GetDate().toLocaleDateString();
这将产生一个“4/5/2014”的值......当我尝试使用以下命令在我的控制器中转换它时:
DateTime myDate = DateTime.ParseExact(request.Params["myDate"], "dd/MM/yyyy", CultureInfo.InvariantCulture);
我得到“字符串未被识别为有效的DateTime”。这是有道理的,因为字符串的格式不正确...当我将字符串硬编码为:“04/05/2014”它将解决我的问题。
无论如何修复来自javascript的格式而不必将字符串拆分为日,月,年并以正确的格式重新组装它?
非常感谢任何建议!
谢谢
其他信息:
string myRequestDate = request.Params["myDate"];
string myViewBagDate = ViewBag.MyDate;
//This line passes
DateTime date1 = DateTime.ParseExact(myViewBagDate, "d/M/yyyy", CultureInfo.InvariantCulture);
//This line fails...
DateTime date5 = DateTime.ParseExact(myRequestDate, "d/M/yyyy", CultureInfo.InvariantCulture);
当我在两个字符串变量上添加一个监视时,我看到的每种方式的值都相同,但由于某种原因,第二行失败...
因此,当我将myRequestDate看作一个char数组时,我发现那里有一堆看起来不像日期的东西......
答案 0 :(得分:1)
只需更改用于匹配JavaScript日期的格式字符串即可。
DateTime.ParseExact(request.Params["myDate"], "d/M/yyyy", CultureInfo.InvariantCulture);
答案 1 :(得分:1)
此代码:
var d=new Date();
console.log(d.toString());
在Windows 8.1 Chrome中执行此输出
"Wed Jun 04 2014 20:38:23 GMT+0200 (Hora de verano romance)"
但是在Kubuntu的Cromium中
"Wed Jun 04 2014 20:38:23 GMT+0200 (CEST)"
非常相似,但其他浏览器返回不同类型的格式,我使用此功能,这种工作与各种格式很好。
public static DateTime ParseDate(string value)
{
if (value == null)
{
throw new ArgumentNullException("value");
}
string[] formats = {"ddd MMM dd yyyy hh:mm:ss 'UTC'zzz",
"ddd MMM d yyyy hh:mm:ss 'UTC'zzz",
"ddd MMM d hh:mm:ss 'UTC'zzz yyyy",
"ddd MMM dd hh:mm:ss 'UTC'zzz yyyy",
"ddd MMM dd yyyy hh:mm:ss 'GMT'zzz",
"ddd MMM d yyyy hh:mm:ss 'GMT'zzz",
"ddd MMM d hh:mm:ss 'GMT'zzz yyyy",
"ddd MMM dd hh:mm:ss 'GMT'zzz yyyy",
"dd-MM-yyyy",
"yyyy-MM-dd'T'hh:mm:ss"
};
DateTime fecha;
//Try the default
if (!DateTime.TryParse(value, out fecha))
{
if (!DateTime.TryParseExact(value, formats,
new CultureInfo("en-US"),
DateTimeStyles.None, out fecha))
{
if (value.Length > 24)
{
return ParseDate(value.Substring(0, 24));
}
else
{
throw new FormatException();
}
}
}
return fecha;
}
答案 2 :(得分:1)
字符8206(U + 200E)是Unicode LEFT-TO-RIGHT MARK(不可见)。 试着找出它来自哪里并从源头上删除它。
作为解决方法,您可以在解析日期之前删除这些字符:
myRequestDate = myRequestDate.Replace("\u200E", "");
DateTime date5 = DateTime.ParseExact(myRequestDate, "d/M/yyyy", CultureInfo.InvariantCulture);
答案 3 :(得分:1)
在客户端使用以下代码:
(date.GetDate()).toDateString();
在你的控制器方面:
var date = Convert.ToDateTime(Request.Params["myDate"]);