JavaScriptの日付からC#の日付に変換する場合は、getTime()
を使用し、その結果をC#DateTime
に追加する必要があることを読んでいます。
このJavaScript時間があるとします。
Date {Tue Jul 12 2011 16:00:00 GMT-0700 (Pacific Daylight Time)}
1310522400000
ミリ秒にレンダリングします
var a = new DateTime(1970, 01, 01).AddMilliseconds(1310522400000);
// result
7/13/2011 2:00:00 AM
だからこれは間違っています。私は何をする必要があるのか分かりません。
まず、JavaScriptで次の関数を使用して、必要な形式で文字列を作成します
_var date = new Date();
var day = date.getDate(); // yields date
var month = date.getMonth() + 1; // yields month (add one as '.getMonth()' is zero indexed)
var year = date.getFullYear(); // yields year
var hour = date.getHours(); // yields hours
var minute = date.getMinutes(); // yields minutes
var second = date.getSeconds(); // yields seconds
// After this construct a string with the above results as below
var time = day + "/" + month + "/" + year + " " + hour + ':' + minute + ':' + second;
_
この文字列をコードビハインド関数に渡し、文字列パラメーターとして受け入れます。次のように、コードビハインドでDateTime.ParseExact()
を使用してこの文字列をDateTime
に変換します。
_DateTime.ParseExact(YourString, "dd/MM/yyyy HH:mm:ss", CultureInfo.InvariantCulture);
_
お役に立てれば...
toJSON() JavaScriptメソッドを使用すると、JavaScriptのDateTimeをC#がDateTimeとして認識できるものに変換できます。
JavaScriptコードは次のようになります
var date = new Date();
date.toJSON(); // this is the JavaScript date as a c# DateTime
あなたはほとんど正しかった、ただ一つの小さな修正が必要です:
var a = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)
.AddMilliseconds(1310522400000)
.ToLocalTime();
DateTime.Parse
の方がはるかに良い方法です。 JS日付とC#日付は、同じルートから始まりません。
サンプル:
DateTime dt = DateTime.ParseExact("Tue Jul 12 2011 16:00:00 GMT-0700",
"ddd MMM d yyyy HH:mm:ss tt zzz",
CultureInfo.InvariantCulture);
アプリケーションでmoment.jsを使用している場合。
var x = moment(new Date())。format( 'DD/MM/YYYY hh:mm:ss')
x
を分離コード関数に渡し、文字列パラメーターとして受け入れます。次のようにc#でDateTime.ParseExact()
を使用して、この文字列をDateTimeに変換します。
DateTime.ParseExact(YourString, "dd/MM/yyyy HH:mm:ss", CultureInfo.InvariantCulture);
JSからC#に日付を送信する場合、実際には非常に簡単です-UTC日付の送信が許容される場合。
_var date = new Date("Tue Jul 12 2011 16:00:00 GMT-0700");
var dateStrToSendToServer = date.toISOString();
_
... C#側に送信...
_var success = DateTimeOffset.TryParse(jsISOStr, CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal, out var result);
_
C#DateTime
はすでにISO日付形式を理解しており、それをうまく解析します。
C#からJSにフォーマットするには、DateTime.UtcNow.ToString("o")
を使用します。
個人的には、異なる環境間で数学と論理に頼って、ミリ秒/ティックを取得して、ユーザーがクライアントで表示するのと同じ日時を(特に重要な場所で)正確に表示することは決して快適ではありません。通貨を転送するときも同じようにします(代わりに文字列を使用して安全にするか、2つの異なる整数間でドルとセントを分離します)。日付/時刻を個別の値として送信するだけで十分です( 受け入れられた回答 を参照)。
私は別のタイムゾーンにいるので、JavaScriptとC#は同じ日付の間に2時間の差があることになります(日付を[文字列/他のオブジェクトに変換されない]日付としてWebサービスに送信しようとしても)。
JavaScriptでgetTime()を使用してミリ秒をC#日付(1970-01-01から開始)に追加しようとしましたが、C#日付では常に2時間前になってしまいました。
両側で同じ日付と時間を取得することを認めるために、私はこれをやった:
JavaScriptでは、UTC関数を使用しました。
var jsDate = Date.UTC(year,month,day,hours,minutes,seconds,millisec);
そして、C#で正しいDateTimeを取得するためにこれを行いました。
var date = new DateTime(1970, 1, 1, 0, 0, 0, 0).AddMilliseconds(jsDate);
それが誰かを助けることを願っています。
米国太平洋時間帯にいる場合、エポックは午後4時です。 1969年12月31日。エポック以降のミリ秒を
new DateTime(1970, 01, 01)
タイムゾーンがないため、your timezoneにあると解釈されました。
瞬間をエポック以降のミリ秒と考えるのは本当に悪いことではありませんが、エポックは1970-01-01T00:00:00Zにすぎないことを理解してください。
タイムゾーンのない日付として表される場合、時間のインスタントを考えることはできません。
Moment.jsライブラリを使用してJs時間をC#に送信することもできます。
JavaScript:var dateString = moment(new Date()).format('LLLL')
C#:DateTime.Parse(dateString);
JS:
function createDateObj(date) {
var day = date.getDate(); // yields
var month = date.getMonth(); // yields month
var year = date.getFullYear(); // yields year
var hour = date.getHours(); // yields hours
var minute = date.getMinutes(); // yields minutes
var second = date.getSeconds(); // yields seconds
var millisec = date.getMilliseconds();
var jsDate = Date.UTC(year, month, day, hour, minute, second, millisec);
return jsDate;
}
JS:
var oRequirementEval = new Object();
var date = new Date($("#dueDate").val());
CS:
requirementEvaluations.DeadLine = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)
.AddMilliseconds(Convert.ToDouble( arrayUpdateRequirementEvaluationData["DeadLine"]))
.ToLocalTime();
function TimeHelper_GetDateAndFormat() {
var date = new Date();
return MakeValid(date.getDate()).concat(
HtmlConstants_FRONT_SLASH,
MakeValid(date.getMonth() + 1),
HtmlConstants_FRONT_SLASH,
MakeValid(date.getFullYear()),
HtmlConstants_SPACE,
MakeValid(date.getHours()),
HtmlConstants_COLON,
MakeValid(date.getMinutes()),
HtmlConstants_COLON,
MakeValid(date.getSeconds()));
}
function MakeValid(timeRegion) {
return timeRegion !== undefined && timeRegion < 10 ? ("0" + timeRegion).toString() : timeRegion.toString();
}
private const string DATE_FORMAT = "dd/MM/yyyy HH:mm:ss";
public DateTime? JavaScriptDateParse(string dateString)
{
DateTime date;
return DateTime.TryParseExact(dateString, DATE_FORMAT, CultureInfo.InvariantCulture, DateTimeStyles.None, out date) ? date : null;
}
Harunの答えにはいくつかの間違いがありましたが、以下で修正されています。
1)harunが使用された日付getDay()
は正しくありませんgetDate()
2)getMonth()
は実際の月よりも1か月少ない月を与えるため、以下に示すように1ずつ増やす必要があります
_var date = new Date();
var day = date.getDate(); // yields
var month = date.getMonth() + 1; // yields month
var year = date.getFullYear(); // yields year
var hour = date.getHours(); // yields hours
var minute = date.getMinutes(); // yields minutes
var second = date.getSeconds(); // yields seconds
// After this construct a string with the above results as below
var time = day + "/" + month + "/" + year + " " + hour + ':' + minute + ':' + second;
_
この文字列をコードビハインド関数に渡し、文字列パラメーターとして受け入れます。次のように、コードビハインドでDateTime.ParseExact()
を使用してこの文字列をDateTime
に変換します。
_DateTime.ParseExact(YourString, "dd/MM/yyyy HH:mm:ss", CultureInfo.InvariantCulture);
_
これは私のために働いた!これもあなたのお役に立てば幸いです。
@Garthが指摘したソリューションを使用して問題を解決することができました。
date.toJSON()
[〜#〜] update [〜#〜]:.NETバージョン4.6から FromUnixTimeMilliseconds のメソッドを使用- DateTimeOffset 代わりに構造:
DateTimeOffset.FromUnixTimeMilliseconds(1310522400000).DateTime
TimeZoneInfo ....を使用して日時を変換できると思います...
static void Main(string[] args)
{
long time = 1310522400000;
DateTime dt_1970 = new DateTime(1970, 1, 1);
long tricks_1970 = dt_1970.Ticks;
long time_tricks = tricks_1970 + time * 10000;
DateTime dt = new DateTime(time_tricks);
Console.WriteLine(dt.ToShortDateString()); // result : 7/13
dt = TimeZoneInfo.ConvertTimeToUtc(dt);
Console.WriteLine(dt.ToShortDateString()); // result : 7/12
Console.Read();
}