簡體   English   中英

Javascript日期到ASP.NET日期:字符串未被識別為有效的DateTime

[英]Javascript date to ASP.NET date: String was not recognized as a valid DateTime

我使用以下命令通過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數組時,我發現其中有一堆東西看起來根本不像日期...

在此處輸入圖片說明

只需更改您使用的格式字符串以匹配您從JavaScript日期獲得的格式字符串即可。

DateTime.ParseExact(request.Params["myDate"], "d/M/yyyy", CultureInfo.InvariantCulture);

這段代碼:

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)"

但是在庫本圖的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;

    }

字符8206(U + 200E)是Unicode左到右標記(不可見)。 嘗試找出它的來源,並從源頭將其刪除。

解決方法是,您可以在解析日期之前刪除這些字符:

myRequestDate = myRequestDate.Replace("\u200E", "");
DateTime date5 = DateTime.ParseExact(myRequestDate, "d/M/yyyy", CultureInfo.InvariantCulture);

在客戶端使用以下代碼:

    (date.GetDate()).toDateString();

在您的控制器端:

    var date = Convert.ToDateTime(Request.Params["myDate"]);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM