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 날짜까지?
답변
시험:
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;
두 날짜가 동일한 시간대에있는 한 두 번째 생각으로는 중요하지 않습니다.
답변
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);
답변
작업에서 이것을 시도 할 수 있습니다.
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")');
답변
함께 Moment.js 단순히 사용
var jsDate = moment(netDateTime).toDate();
netDateTime
DateTime 변수는 어디에 직렬화되어 있습니까 "/Date(1456956000000+0200)/"
?
답변
이것은 트릭을 수행해야합니다.
date.Subtract(new DateTime(1970, 1,1)).TotalMilliseconds
답변
나는 이것이 조금 늦었다는 것을 알고 있지만 여기에 시간대에 독립적이기를 원할 때 날짜를 처리하기 위해 생각해 낸 해결책이 있습니다. 기본적으로 모든 것을 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)
내가 아는 한, 이것은 시간대에 독립적 인 날짜를 표시해야하는 모든 시간대에서 작동합니다.
답변
이 방법은 저에게 효과적입니다.
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;
}
