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