2015-12-03 2 views
2

У меня есть функция в JavaScript и ее возвращение в неправильный день месяца, пожалуйста, помогите мне узнать, в чем проблема.Javascript getDate Функция возвращает неправильный день месяца

вот код:

function getFormattedDate(date) { 
    var year = date.getFullYear(); 
    var month = (1 + date.getMonth()).toString(); 
    month = month.length > 1 ? month : '0' + month; 
    var day = date.getDate().toString(); 
    //condition ? value-if-true : value-if-false 
    day = day.length > 1 ? day : '0' + day; 
    return month + '/' + day + '/' + year; 
} 

Я передаю/нижеследующую дату из базы данных Oracle: 31-MAR-1944 - Вот как это выглядит в таблице оракула.

я получаю следующее возвращаемое значение: 03/30/1944

Целью этой функции является просто вернуть ту же дату в другом формате, например, MM/DD/YYYY.

Что я делаю неправильно?

Благодаря

+4

Это проблема с часовым поясом –

+3

Ваша функция отлично работает для меня. Можете ли вы показать, как вы анализируете дату для объекта даты js? – msangel

+0

Я не разбираю объект даты. Все, что я делаю, это передать его в процессор сценариев и код: var dateArr = input1 [0]; // это вход из моментального снимка из базы данных var bnfdobArr = new Date (dateArr); var results = ""; // Это когда-нибудь равно 01/01/0001 someday = new Date(); someday.setFullYear (0001, 0, 01); if (bnfdobArr> someday) { results = getFormattedDate (bnfdobArr); } output1 = результаты; // return output – AJR

ответ

0

Попробуйте это, и я думаю, что вы получите некоторую информацию, которая поможет вам:

getFormattedDate(new Date('31-MAR-1944 GMT')); 
getFormattedDate(new Date('31-MAR-1944')); 

Первый из них работает «неправильно», потому что разбирает этот конкретный формат даты dd-mmm-yyyy строку в Часовой пояс GMT, и вы, по-видимому, на несколько часов отстаете от GMT, GMT-x. Однако второй работает «правильно», потому что время находится в вашем собственном часовом поясе до начала вычислений функции. Фактически, если вы просто изучите базовое значение даты, которое передается функции, вы можете узнать все, что вам нужно. На моем компьютере вот пример:

new Date('31-MAR-1944 GMT') 
// Thu Mar 30 1944 17:00:00 GMT-0700 (Pacific Daylight Time) 

Чтобы перевести дату из текущего часового пояса и обратно в исходный часовом пояс (это становится сложно сказать, в зависимости от того, как вы смотрите на это), вам нужно делать что-то вроде использования другого формата, удалять часовой пояс из строки даты или вести учет различий часовых поясов между компьютерами в вашей организации. Вы могли видеть, выполняют ли функции getUtcDate и getUtcMonth, или вы можете сделать явный расчет часового пояса.

Начните с объекта даты, затем getTimezoneOffset() на нем. Это возвращает число в минутах обратного знака к смещению GMT в часах. Преобразуйте смещение часовой пояс времени сервера в минуты и соответствующим образом добавьте или вычтите. ТОГДА сделайте свою математическую дату, чтобы получить отформатированную дату.

+0

Я все еще получаю тот же ответ. Поэтому у меня есть обновление. В таблице Oracle это выглядит как 31-MAR-1944, но мой снимок читает его как 31 марта 1944 года 12:00:00. Это имеет значение? Таким образом, в основном мой вход - 31 марта 1944 года 12:00:00. Thx – AJR

+0

Я поддерживаю свой комментарий. Вам нужно посмотреть значение даты, которое передается функции.Можете ли вы отлаживать и помещать контрольную точку в код, чтобы вы могли проверить значение даты во время выполнения? – ErikE

+0

Это значение даты, переданное функции во время выполнения. Чт 30 мар 1944 23:00:00 GMT-0500 (EST) thx – AJR

Смежные вопросы