преобразование даты javascript в c # datetime

#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 .