#javascript #c# #datetime
#javascript #c# #datetime
Вопрос:
Я пытаюсь преобразовать дату javascript в c # datetime
Код JavaScript
var date = new Date();
var day = date.getDay();
var month = date.getMonth();
var year = date.getFullYear();
var hour = date.getHours();
var minute = date.getMinutes();
var second = date.getSeconds();
// After this construct a string with the above results as below
var JSDateString = year "-" month "-" day " " hour ':' minute ':' second;
C # Код
var JSDateString = "2016-04-02 17:15:45"; // I receive date string via Ajax call in this format
var dt = DateTime.ParseExact(JSDateString , "yyyy-mm-dd HH:mm:ss", CultureInfo.InvariantCulture);
Я получаю недопустимое исключение формата datetime. Я исследовал другие варианты в Интернете, но не нашел никакого конкретного ответа о том, как преобразовать JavaScript datetime в C # datetime.
Комментарии:
1. следует преобразовать его в метку времени
2. @Steve да, а также обратите внимание на возможную разницу в часовых поясах между клиентом и сервером в этом случае.
3. Временная метка @r1verside безопасна для часового пояса. если вы не хотите использовать серверное время вместо местного
4. Временная метка @Steve — это UTC. Но проблема в том, что JavaScript не знает, как обрабатывать часовой пояс, поэтому, если вы отображаете даты в часовом поясе, отличном от часового пояса браузера, это даст вам неверную временную метку, потому что это не будет UTC.
5. @r1verside op пытается проанализировать дату и время, отправленные из js time в c # time.
Ответ №1:
mm
это для минут, вы хотите MM
для месяца:
var dt = DateTime.ParseExact(JSDateString , "yyyy-MM-dd HH:mm:ss", CultureInfo.InvariantCulture);
Ответ №2:
Это может помочь со стороны JavaScript:
function getDate() {
var date = new Date(),
year = date.getFullYear(),
month = (date.getMonth() 1).toString(),
formatedMonth = (month.length === 1) ? ("0" month) : month,
day = date.getDate().toString(),
formatedDay = (day.length === 1) ? ("0" day) : day,
hour = date.getHours().toString(),
formatedHour = (hour.length === 1) ? ("0" hour) : hour,
minute = date.getMinutes().toString(),
formatedMinute = (minute.length === 1) ? ("0" minute) : minute,
second = date.getSeconds().toString(),
formatedSecond = (second.length === 1) ? ("0" second) : second;
return year "-" formatedMonth "-" formatedDay " " formatedHour ':' formatedMinute ':' formatedSecond;
};
Посмотреть скрипку здесь: https://jsfiddle.net/kpduncan/de8j318k /
Мне тоже приходилось делать что-то подобное, когда я создавал приложение из-за того, что мне не разрешалось добавлять сторонний JS и нуждаться в поддержке IE8.
Комментарии:
1. Спасибо. Очень полезно для конечных нулей для синтаксического анализа на стороне C # (хотя скрипка исчезла)
Ответ №3:
Как вы можете видеть в MSDN, mm
это для минут (00 — 59), тогда MM
как для месяца (01 — 12).
var JSDateString = "2016-04-02 17:15:45";
var formatCode = "yyyy-MM-dd HH:mm:ss";
var dt = DateTime.ParseExact(JSDateString , formatCode, CultureInfo.InvariantCulture);
Вы можете видеть, что mm
это для минут, потому что вы уже используете его в своем HH:mm:ss
.