c# - yyyy - typescript ticks to date




Как конвертировать Javascript datetime в C#datetime? (10)

JavaScript (HTML5)

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

C #

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

Я читал, что если вы хотите конвертировать из дат 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

Так что это неправильно. Я не уверен, что мне нужно делать.


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

Вы были почти правы, нужно только одно небольшое исправление:

var a = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)
    .AddMilliseconds(1310522400000)
    .ToLocalTime();

Вы можете использовать метод JavaScript toJSON () , он преобразует JavaScript DateTime в то, что C # может распознавать как DateTime.

Код JavaScript выглядит так:

var date = new Date();
date.toJSON(); // this is the JavaScript date as a c# DateTime

Если вы используете moment.js в своем приложении.

var x = moment (new Date ()). format ('DD / MM / YYYY hh: mm: ss')

Передайте x для функции codebehind и принимайте его как строковый параметр. Используйте DateTime.ParseExact() в c # для преобразования этой строки в DateTime следующим образом:

DateTime.ParseExact(YourString, "dd/MM/yyyy HH:mm:ss", CultureInfo.InvariantCulture);

Если вы находитесь в часовом поясе США в Тихоокеанском регионе, то для вас эпоха - 16 часов 31 декабря 1969 года. Вы добавили миллисекунды с эпохи к

new DateTime(1970, 01, 01)

который, поскольку он не имеет часовой пояс, был интерпретирован как находящийся в вашей временной зоне.

Нет ничего плохого в том, чтобы думать о моментах времени как миллисекундах с эпохи, но понять эпоху - это только 1970-01-01T00: 00: 00Z.

Вы не можете думать о моментах времени, когда они представлены как даты, без часовых поясов.


Поскольку у меня есть другой часовой пояс, мои JavaScript и C # имеют разницу в 2 часа между той же датой (даже когда я пытался отправить дату в веб-службу в качестве даты [не преобразованной в строку / другой объект]).

Я попытался использовать getTime () в JavaScript и добавить миллисекунды к дате C # (начиная с 1970-01-01), но я всегда получал два часа вперед на дату C #.

Чтобы предоставить мне, чтобы я получил одну и ту же дату и час в обеих сторонах, я закончил это:

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

Надеюсь, это поможет кому-то.


Сначала создайте строку в требуемом формате, используя следующие функции в 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; 

Передайте эту строку функции codebehind и принимайте ее как строковый параметр. Используйте функцию DateTime.ParseExact() в codebehind, чтобы преобразовать эту строку в DateTime следующим образом:

DateTime.ParseExact(YourString, "dd/MM/yyyy HH:mm:ss", CultureInfo.InvariantCulture);

Надеюсь это поможет...


Я смог решить проблему, используя решение, указанное в @Garth.

date.toJSON()

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




datetime