2010-03-08 39 views
73

Từ một câu trả lời trên Stackoverflow là một sự chuyển đổi từ ngày Javascript để DateTime .net:DateTime để javascript ngày

long msSinceEpoch = 1260402952906; // Value from Date.getTime() in JavaScript 
return new DateTime(1970, 1, 1) + new TimeSpan(msSinceEpoch * 10000); 

Nhưng làm thế nào để làm điều ngược lại? Ngày giờ thành Ngày Javascript?

Cảm ơn,

AJ

+0

Trong câu hỏi như thế này mà rõ ràng là ajax liên quan, bạn nên xác định nơi bạn đang làm việc chuyển đổi, và xem xét rằng không có tiêu chuẩn cho ngày serialization trong JSON và đó có thể là bạn đang đối phó với MS Date munging ví dụ/Date (02020202)/chắc chắn để làm cho rõ ràng là tốt. Chúc may mắn –

+0

Bạn nên liên kết câu trả lời bạn đang đề cập đến – cdmckay

Trả lời

94

Hãy thử:

return DateTime.Now.Subtract(new DateTime(1970, 1,1)).TotalMilliseconds 

Edit: đúng UTC là tốt hơn, nhưng sau đó chúng ta cần phải phù hợp

return DateTime.UtcNow 
       .Subtract(new DateTime(1970,1,1,0,0,0,DateTimeKind.Utc)) 
       .TotalMilliseconds; 

Mặc dù, trên suy nghĩ thứ hai nó không quan trọng, miễn là bot h ngày nằm trong cùng múi giờ.

+5

Bạn có thể muốn sử dụng DateTime.UtcNow thay vì DateTime.Now –

+2

Về suy nghĩ thứ hai của bạn: nó là vấn đề trong quá trình chuyển đổi hoặc từ thời gian tiết kiệm ánh sáng ban ngày (tôi luôn phải nghĩ rằng thực sự khó nhớ :). Trong quá trình chuyển đổi, giờ 2:00 đến 3:00 được lặp lại hai lần. Điều này có nghĩa là trong một giờ, ngày javascript sẽ bị tắt một giờ. UTC không có DLS nên nó không có vấn đề gì. –

+0

Tôi có cùng một mã ở đây nhưng nó làm cho sự khác biệt 5:30 trong ngày javascript trong khi C# ngày hoạt động tốt. –

8

này nên làm như lừa:

date.Subtract(new DateTime(1970, 1,1)).TotalMilliseconds 
36

Javascript Ngày constructor chấp nhận số mili giây kể từ Unix kỷ nguyên (01 tháng 1 năm 1970 00:00:00 UTC). Dưới đây là C# mở rộng phương pháp chuyển đổi đối tượng Net DateTime cho đến nay JavaScript:

public static class DateTimeJavaScript 
{ 
    private static readonly long DatetimeMinTimeTicks = 
     (new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)).Ticks; 

    public static long ToJavaScriptMilliseconds(this DateTime dt) 
    { 
     return (long)((dt.ToUniversalTime().Ticks - DatetimeMinTimeTicks)/10000); 
    } 
} 

Javascript Cách sử dụng:

var dt = new Date(<%= DateTime.Today.ToJavaScriptMilliseconds() %>); 
alert(dt); 
+0

chỉ là những gì tôi cần – spankmaster79

0
<input type="hidden" id="CDate" value="<%=DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss")%>" /> 

Để chuyển đổi ngày cho đến nay JS (tất cả các số):

var JSDate = $("#CDate").val(); 
JSDate = Date.parse(JSDate); 
2

Tôi biết điều này hơi trễ một chút, nhưng đây là giải pháp tôi phải đưa ra để xử lý ngày khi bạn muốn là múi giờ độc lập. Về cơ bản nó liên quan đến việc chuyển đổi mọi thứ sang UTC.

Từ Javascript để máy chủ:

Gửi ra ngày như các giá trị thời đại với múi giờ bù đắp gỡ bỏ.

var d = new Date(2015,0,1) // Jan 1, 2015 
// Ajax Request to server ... 
$.ajax({ 
    url: '/target', 
    params: { date: d.getTime() - (d.getTimezoneOffset() * 60 * 1000) } 
}); 

Máy chủ sau đó recieves 1420070400000 như thời đại ngày.

Về phía Server, chuyển đổi giá trị thời đại đến một đối tượng datetime:

DateTime d = new DateTime(1970, 1, 1, 0, 0, 0).AddMilliseconds(epoch); 

Tại thời điểm này ngày chỉ là ngày/giờ được cung cấp bởi người dùng như họ đã cung cấp nó. Hiệu quả là UTC.

Đi theo cách khác:

Khi máy chủ kéo dữ liệu từ cơ sở dữ liệu, có lẽ trong UTC, có sự khác biệt như một kỷ nguyên (đảm bảo rằng cả hai đối tượng ngày là một trong hai địa phương hoặc UTC):

long ms = (long)utcDate.Subtract(new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)).TotalMilliseconds; 

hoặc

long ms = (long)localDate.Subtract(new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Local)).TotalMilliseconds; 

Khi javascript nhận giá trị này, hãy tạo đối tượng ngày mới. Tuy nhiên, đối tượng ngày này sẽ được giả định theo giờ địa phương, vì vậy bạn cần phải bù đắp nó bằng múi giờ hiện tại:

var epochValue = 1420070400000 // value pulled from server. 
var utcDateVal = new Date(epochValue); 
var actualDate = new Date(utcDateVal.getTime() + (utcDateVal.getTimezoneOffset() * 60 * 1000)) 

console.log(utcDateVal); // Wed Dec 31 2014 19:00:00 GMT-0500 (Eastern Standard Time) 
console.log(actualDate); // Thu Jan 01 2015 00:00:00 GMT-0500 (Eastern Standard Time) 

Theo như tôi biết, điều này sẽ làm việc cho bất kỳ múi giờ nơi bạn cần hiển thị các ngày có múi giờ độc lập.

9

Bạn có thể thử điều này trong hành động của bạn:

return DateTime.Now.ToString("yyyy-MM-ddTHH:mm:ss"); 

Và điều này trong sự thành công Ajax của bạn:

success: function (resultDateString) { 
    var date = new Date(resultDateString); 
} 

Hoặc này trong View của bạn: (javascript cộng C#)

var date = new Date('@DateTime.Now.ToString("yyyy-MM-ddTHH:mm:ss")'); 
12

Với Moment.js chỉ cần sử dụng:

var jsDate = moment(netDateTime).toDate(); 

Trong đó netDateTime là biến DateTime được tuần tự hóa, chẳng hạn như "/Date(1456956000000+0200)/".

1

Phương pháp này đang làm việc cho tôi:

public sCdateToJsDate(cSDate: any): Date { 
     // cSDate is '2017-01-24T14:14:55.807' 
     var datestr = cSDate.toString(); 
     var dateAr = datestr.split('-'); 
     var year = parseInt(dateAr[0]); 
     var month = parseInt(dateAr[1])-1; 
     var day = parseInt(dateAr[2].substring(0, dateAr[2].indexOf("T"))); 
     var timestring = dateAr[2].substring(dateAr[2].indexOf("T") + 1); 
     var timeAr = timestring.split(":"); 
     var hour = parseInt(timeAr[0]); 
     var min = parseInt(timeAr[1]); 
     var sek = parseInt(timeAr[2]); 
     var date = new Date(year, month, day, hour, min, sek, 0); 
     return date; 
    } 
1

Nếu bạn sử dụng MVC với dao cạo

----- Razor/C#

var dt1 = DateTime.Now.AddDays(14).Date; 
    var dt2 = DateTime.Now.AddDays(18).Date; 

    var lstDateTime = new List<DateTime>(); 
    lstDateTime.Add(dt1); 
    lstDateTime.Add(dt2); 

--- Javascript

$(function() { 

      var arr = []; //javascript array 

      @foreach (var item in lstDateTime) 
      { 
       @:arr1.push(new Date(@item.Year, @(item.Month - 1), @item.Day)); 
      } 
  • 1: tạo ra các danh sách trong C# và điền nó
  • 2: Tạo một mảng trong javascript
  • 3: Sử dụng dao cạo để lặp danh sách
  • 4: Sử dụng @: để chuyển về js và @ để chuyển sang C#
  • 5: -1 trong tháng để sửa số tháng theo js.

Chúc may mắn

Các vấn đề liên quan