자바 스크립트 날짜에 대한 DateTime


98

Stackoverflow에 대한 또 다른 답변은 Javascript 날짜에서 .net DateTime으로의 변환입니다.

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

그러나 그 반대로하는 방법? DateTime에서 Javascript 날짜까지?


분명히 아약스와 관련된 이와 같은 질문에서 변환을 수행하는 위치를 지정해야하며 JSON의 날짜 직렬화에 대한 표준이 없으며 / Date (02020202 ) / 그것도 명확하게해야합니다. 행운을 빕니다
Sky Sanders

2
당신은 당신이 언급하고있는 대답을 연결해야합니다
cdmckay

답변:


116

시험:

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

편집 : 진정한 UTC가 더 좋지만 일관성이 있어야합니다.

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

두 날짜가 동일한 시간대에있는 한 두 번째 생각으로는 중요하지 않습니다.


5
DateTime.Now 대신 DateTime.UtcNow를 사용할 수 있습니다.
Matt Dearing

2
두 번째 생각과 관련하여 : 일광 절약 시간 제로 전환하는 동안 중요합니다 (나는 항상 어느 것을 기억하기가 정말 힘들다고 생각해야합니다 :). 전환하는 동안 2:00에서 3:00까지의 시간이 두 번 반복됩니다. 즉, 한 시간 동안 javascript 날짜가 한 시간 씩 사라집니다. UTC에는 DLS가 없으므로 그 문제가 없습니다.
Sebastiaan M

여기에 동일한 코드가 있지만 C # 날짜가 제대로 작동하는 동안 자바 스크립트 날짜가 5시 30 분 차이가납니다.
Jenish Zinzuvadiya

44

JavaScript Date 생성자는 Unix epoch (1970 년 1 월 1 일 00:00:00 UTC) 이후의 밀리 초 수를 허용합니다. .Net DateTime 개체를 JavaScript 날짜로 변환하는 C # 확장 메서드는 다음과 같습니다.

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);
   }
}

자바 스크립트 사용 :

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

C # 사용 긴 날짜 = DateTimeJavaScript.ToJavaScriptMilliseconds (DateTime); 자바 스크립트에서 확인 (Google 크롬에서 F12를 누르고 콘솔로 이동) var date = new Date (long); console.log (date.toString ());
Gonen09

24

작업에서 이것을 시도 할 수 있습니다.

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

그리고 이것은 Ajax 성공에서 :

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

또는 이것은 귀하의 뷰에서 : (Javascript + C #)

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

1
쉽고 빠른 이해하세요
FindOutIslamNow

나에게 가장 좋은 대답
인 Navid

23

함께 Moment.js 단순히 사용

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

netDateTimeDateTime 변수는 어디에 직렬화되어 있습니까 "/Date(1456956000000+0200)/"?


11

이것은 트릭을 수행해야합니다.

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

4

나는 이것이 조금 늦었다는 것을 알고 있지만 여기에 시간대에 독립적이기를 원할 때 날짜를 처리하기 위해 생각해 낸 해결책이 있습니다. 기본적으로 모든 것을 UTC로 변환하는 작업이 포함됩니다.

자바 스크립트에서 서버로 :

시간대 오프셋이 제거 된 epoch 값으로 날짜를 보냅니다.

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) }
});

그런 다음 서버는 날짜 epoch로 1420070400000을 수신합니다.

서버 측에서 해당 epoch 값을 datetime 객체로 변환합니다.

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

이 시점에서 날짜는 사용자가 제공 한 날짜 / 시간입니다. 사실상 UTC입니다.

다른 길로 가기 :

서버가 데이터베이스에서 데이터를 가져올 때 (아마도 UTC로) 차이를 epoch로 가져옵니다 (두 날짜 개체가 모두 로컬 또는 UTC인지 확인).

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

또는

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

자바 스크립트가이 값을 받으면 새 날짜 개체를 만듭니다. 그러나이 날짜 객체는 현지 시간으로 간주되므로 현재 시간대로 오프셋해야합니다.

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)

내가 아는 한, 이것은 시간대에 독립적 인 날짜를 표시해야하는 모든 시간대에서 작동합니다.


3

이 방법은 저에게 효과적입니다.

   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

면도기와 함께 MVC를 사용하는 경우

----- 면도기 / 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);

--- 자바 스크립트

$(function() {

            var arr = []; //javascript array

            @foreach (var item in lstDateTime)
             {
                @:arr1.push(new Date(@item.Year, @(item.Month - 1), @item.Day));
             }
  • 1 : C #으로 목록을 만들고 채우기
  • 2 : 자바 스크립트에서 배열 만들기
  • 3 : 면도기를 사용하여 목록 반복
  • 4 : @ :를 사용하여 js로 다시 전환하고 @를 사용하여 C #으로 전환합니다.
  • 5 : js의 월 번호를 수정하기위한 월의 -1.

행운을 빕니다


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

날짜를 JS 날짜 (모든 숫자)로 변환하려면 :

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

0

또 다른 늦은 답변이지만 여기에 누락되었습니다. /Date(1425408717000)/자바 스크립트에서 직렬화 된 변환을 처리 하려면 다음을 호출하면됩니다.

var cSharpDate = "/Date(1425408717000)/"
var jsDate = new Date(parseInt(cSharpDate.replace(/[^0-9 +]/g, '')));

출처 : amirsahib


답이지만, 웩. 나는 그것을 추천하지 않는다. 두 가지 해킹은 옳지 않습니다. 그리고 Microsoft의 직렬화는 불쾌한 해킹입니다.
Suncat2000

@ Suncat2000이 해킹은 어때? 서버에서 프런트 엔드로 값을 검색하기 위해 서비스를 사용하는 경우 더 나은 대안이 없습니다. 이것은이 페이지의 문제에 대한 가장 깨끗한 해결책입니다. 더 나은 대안을 알고 있다면 예를 보여 주시겠습니까?
Kajbo
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.