JavaScript 날짜 개체를 눈금으로 변환하는 방법


79

JavaScript 날짜 객체를 틱으로 어떻게 변환해야합니까? 데이터 동기화 후 틱을 사용하여 C # 애플리케이션의 정확한 날짜를 얻고 싶습니다.


1
브라우저의 날짜 / 시간은 임의의 시간대로 설정 될 수 있으므로 데이터는 서버의 UTC와 관련이 없습니다. 나는 일반적으로 서버의 utcnow틱 단위 (1970 년 기준)를 페이지 에 주입하고 해당 값과 +new Date()페이지 시작시 의 차이를 저장하여 보상 합니다. 그런 다음 모든 날짜 / 시간을 해당 금액만큼 상쇄 할 수 있습니다. 그런 다음 모든 오류는 페이지 대기 시간까지입니다.
Gone Coding

답변:


119

DateTime객체를 범용 틱으로 변환 하려면 다음 코드 스 니펫을 사용하십시오.

var ticks = ((yourDateObject.getTime() * 10000) + 621355968000000000);

밀리 초에는 10000 틱이 있습니다. 그리고 0001 년 1 월 1 일부터 1970 년 1 월 1 까지 621.355.968.000.000.000 틱 입니다.


5
이것은 C #에서 틱을 얻습니다. 자바 스크립트 방식에 대해서는 아래 pointy의 답변을 참조하십시오.
표시

나는 그것을 좋아하지 않는다라는 것을 인정해야하지만 :( 작동
밀튼

1
추가 된 번호가 나와 함께 작동하지 않습니다. 항상 전날 21:00에 시간을 제공하지만이 번호 (621356076000000000)는 잘 작동합니다. 어떤 아이디어 ??
MuniR

Google Chrome 56.0.2924.87 (64 비트)에서 올바른 값은 (621356076000000000)입니다.이 두 값의 차이점은 무엇입니까?
okarpov 2012

C # 또는 JavaScript에 대한 답변은 어떤 프로그래밍 언어입니까? 즉, 이것은 어디에서 구현됩니까?
barrypicker

55

JavaScript Date유형의 기원은 1970 년 1 월 1 일 자정 인 Unix 시대입니다.

.NET DateTime유형의 출처는 0001 년 1 월 1 일 자정입니다.

Date다음과 같이 JavaScript 객체를 .NET 틱으로 변환 할 수 있습니다 .

var yourDate = new Date();  // for example

// the number of .net ticks at the unix epoch
var epochTicks = 621355968000000000;

// there are 10000 .net ticks per millisecond
var ticksPerMillisecond = 10000;

// calculate the total number of .net ticks for your date
var yourTicks = epochTicks + (yourDate.getTime() * ticksPerMillisecond);

1
나는 설명을 위해이 대답을 좋아합니다. 감사!
Pawel Cioch

4
(621355968e9 + (new Date()).getTime() * 1e4)이해가되면이 4 줄을 압축합니다. Great share @LukeH
SliverNinja-MSFT

39

"틱"이 "에포크 이후 밀리 초"와 같은 것을 의미하는 경우 ".getTime ()"을 호출 할 수 있습니다.

var ticks = someDate.getTime();

로부터 MDN 문서 , 반환 값은이다

1970 년 1 월 1 일 00:00:00 UTC (Unix Epoch) 이후의 밀리 초 수를 나타내는 정수 값입니다.


12
ticks! = milliseconds, 그래서 C #에서 하나의 틱은 100 나노초를 나타냅니다
amd

11

이유 635646076777520000가 추가 되어 허용되는 답변을 확장합니다 .

자바 스크립트 new Date().getTime() or Date.now()는에서 전달 된 밀리 초 수를 반환 midnight of January 1, 1970합니다.

.NET에서 ( 섹션 아래 소스Remarks )

DateTime 값 유형은 00:00:00 (자정), 0001 년 1 월 1 일 Anno Domini (일반 시대)에서 9999 년 12 월 31 일 오후 11:59:59 (CE)까지 범위의 값으로 날짜와 시간을 나타냅니다. 달력.

621355968000000000진드기의 값 midnight Jan 1 01 CE으로는midnight Jan 1 1970

그래서 .NET에서

  Console.Write(new DateTime(621355968000000000))
  // output 1/1/1970 12:00:00 AM

따라서 자바 스크립트 시간을 .Net 틱으로 변환하려면

 var currentTime = new Date().getTime();

 // 10,000 ticks in 1 millisecond
 // jsTicks is number of ticks from midnight Jan 1, 1970
 var jsTicks = currentTime * 10000;

 // add 621355968000000000 to jsTicks
 // netTicks is number of ticks from midnight Jan 1, 01 CE
 var netTicks = jsTicks + 621355968000000000;

이제 .NET에서

 Console.Write(new DateTime(netTicks))
 // output current time

6

JavaScript의 날짜에는 오프셋도 포함되어 있습니다. 제거해야하는 경우 다음을 사용하십시오.

return ((date.getTime() * 10000) + 621355968000000000) - (date.getTimezoneOffset() * 600000000);

나는 Skeikh의 솔루션을 사용하고 '오프셋'을 위해 틱을 뺍니다.


2

이어야합니다 date.GetTime(). C #과 Javascript는 서로 다른 초기 날짜를 사용하므로 이와 같은 것을 사용하여 C # DateTime으로 변환하십시오.

public static DateTime GetDateTime(long jsSeconds)
{
    DateTime unixEpoch = new DateTime(1970, 1, 1, 0, 0, 0, 0);
    return unixEpoch.AddSeconds(jsSeconds);
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.