2013-07-30 83 views
29

Tôi có một hàm trong Javascript nhận C# DateTime từ MVC. Nếu ngày là null, nó sẽ trả về "-", nếu đó là ngày hợp lệ, nó sẽ trả về ngày được định dạng.Chuyển đổi C# DateTime thành Ngày Javascript

QUAN TRỌNG: Không thể gửi ngày ở định dạng khác từ C#.

Javascript:

function CheckDate(date) { 

    if (date == "Mon Jan 01 0001 00:00:00 GMT+0000 (GMT Daylight Time)") 
    return "-"; 
    else { 
    var dat = new Date(date); 
    return dat.getFullYear() + dat.getMonth() + dat.getDay(); 
    } 

Có cách nào tốt hơn để so sánh nếu ngày là C# New DateTime?

Và làm cách nào để phân tích cú pháp và trả về ngày ở định dạng "yyyy/MM/dd"?

+1

mã chuyển đổi nó trên C# bên là gì? Ví dụ, nó cũng có thể là văn hóa cụ thể cho bất cứ nơi nào máy chủ được. –

+0

"Sao chép" http://stackoverflow.com/questions/1056728/formatting-a-date-in-javascript –

+0

Mã ở phía máy chủ chỉ là CheckDate (@ model.Dated) Nó chỉ là một đối tượng C# DateTime. –

Trả lời

35

Với đầu ra bạn đang mắc kẹt, tôi không thể nghĩ ra cách nào tốt hơn để bắt một số DateTime của 0 ở phía javascript.

Date.parse nên làm việc cho các nhu cầu phân tích của bạn, nhưng nó sẽ trả về số mili giây, vì vậy bạn cần phải quấn một ngày constructor xung quanh nó:

var date = new Date(Date.parse(myCSharpString)); 

Đối với ngày trở lại, bạn chỉ đơn giản muốn

date.getFullYear() + "/" + (date.getMonth() + 1) + "/" + (date.getDate() + 1); 

(date.getMonthdate.getDate được 0-lập chỉ mục thay vì 1-lập chỉ mục.)

Fiddle: http://jsfiddle.net/GyC3t/

EDIT Nhờ bắt JoeB của, hãy để tôi làm một sự điều chỉnh. Hàm date.getMonth() được lập chỉ mục 0, nhưng hàm date.getDate() được lập chỉ mục 1. Fiddle đã "hoạt động" với +1 vì date.getMonth hoạt động theo giờ địa phương, trước giờ UTC. Tôi đã không kiểm tra đúng tài liệu, và chỉ cần thêm 1, và nó đã làm việc với fiddle.

Một cách thích hợp hơn để làm điều này là:

Đối với ngày trở lại, bạn chỉ đơn giản muốn

date.getFullYear() + "/" + (date.getMonth() + 1) + "/" + (date.getUTCDate()); 

(date.getMonth là 0-lập chỉ mục trong khi date.getDate là 1-lập chỉ mục nhưng nhạy cảm với múi giờ sự khác biệt)

Fiddle:. http://jsfiddle.net/GyC3t/25/

+1

Thật tuyệt vời !! Cảm ơn. –

+3

Số ngày tháng Javascript được lập chỉ mục 0, nhưng ngày được lập chỉ mục 1. – JoeB

+0

@JoeB Wow. Điều đó thật kinh khủng với tôi. Cảm ơn vì đã bắt được điều đó! –

1

tôi sử dụng sau đây để vượt qua một Javascript ngày int o C#:

var now = new Date(); 
var date = (now.getTime()/86400000) - (now.getTimezoneOffset()/1440) + 25569; 

Vì vậy, nếu bạn nhận được số mili giây từ C#, nó phải là một cái gì đó như thế này:

var csharpmilliseconds; 
var now = new Date(); 
var date = new Date((csharpmilliseconds + (now.getTimezoneOffset()/1440) - 25569) * 86400000); 
Các vấn đề liên quan