DateTime - дата javascript

Из другого ответа в Stackoverflow это преобразование с даты Javascript в .net DateTime:

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

Но как сделать обратное? DateTime to Javascript Date?

Спасибо,

AJ

Ответ 1

Try:

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;

Хотя, во-вторых, это не имеет значения, если обе даты находятся в одном и том же часовом поясе.

Ответ 2

Конструктор JavaScript Date принимает число миллисекунд с момента Unix (1 января 1970 года 00:00:00 по UTC). Heres С#, который преобразует объект .Net DateTime в дату JavaScript:

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

Использование JavaScript:

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

Ответ 3

С Moment.js просто используйте:

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

Где netDateTime - ваша переменная DateTime, сериализована, что-то вроде "/Date(1456956000000+0200)/".

Ответ 4

Это должно сделать трюк:

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

Ответ 5

Вы можете попробовать это в своем действии:

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

И это в вашем успехе Ajax:

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

Или это в вашем представлении: (Javascript плюс С#)

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

Ответ 6

Я знаю, что это немного поздно, но вот решение, которое мне пришлось придумать для обработки дат, когда вы хотите быть независимым от времени. По сути, это связано с преобразованием всего в UTC.

От Javascript к серверу:

Отправлять даты как значения эпохи с удалением смещения часового пояса.

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

Затем сервер получает 1420070400000 в качестве даты.

На стороне сервера преобразуйте это значение эпохи в объект datetime:

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

На данный момент дата - это только дата/время, предоставленное пользователем по мере их предоставления. Эффективно это UTC.

Переход другим способом:

Когда сервер извлекает данные из базы данных, предположительно в формате UTC, получает разницу как эпоху (убедитесь, что оба объекта даты являются локальными или 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;

Когда javascript получает это значение, создайте новый объект даты. Тем не менее, этот объект даты будет предполагаться по местному времени, поэтому вам необходимо отменить его по текущему часовому поясу:

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)

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

Ответ 7

Если вы используете MVC с бритвой

----- Бритва/С#

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

--- Javascript

$(function() {

            var arr = []; //javascript array

            @foreach (var item in lstDateTime)
             {
                @:arr1.push(new Date(@item.Year, @(item.Month - 1), @item.Day));
             }
  • 1: создать список на С# и заполнить его
  • 2: создать массив в javascript
  • 3: используйте бритву, чтобы перебрать список.
  • 4: Используйте @: чтобы вернуться к js и @, чтобы переключиться на С#
  • 5: -1 в месяц, чтобы исправить номер месяца в js.

Удачи.

Ответ 8

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

Чтобы преобразовать дату в дату JS (все номера):

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

Ответ 9

Этот метод работает для меня:

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