2015-12-02 3 views
0

Я использую Javascript методы Даты объекта ToString для форматирования даты следующимдата Javascript для метода строки не работает должным образом

var firstDate ='13/11/2015 13:27:24'; 
var secondDate ='07/11/2015 13:19:45'; 

var dateDisplay1 = Date.parse(firstDate).toString("dd/MM/yyyy HH:mm"); 

ВЫВОД: 13/11/2015 13:27 => 13 ноября правильно

var dateDisplay2 = Date.parse(secondDate).toString("dd/MM/yyyy HH:mm"); 
11/07/2015 13:19 

ВЫВОД: 11/07/2015 13:19 => 11 июля неправильно это должно быть 7 ноября

ОЖИДАЕМЫЕ для dateDisplay2 будет 07/11/2015 13:19

+1

По умолчанию используется американский формат даты, используйте это, чтобы объявить дату Date («2015-11-7») или Date («7 ноября 2015») – Jules

+2

Не разбирайте строки, используя Date.parse, когда-либо. Разберите их вручную. Библиотека может помочь, но вы должны знать формат заранее, и если вам нужно только иметь дело с одним, тогда все две строки необходимы. – RobG

+0

Я получаю NaN, когда я пробую ваш код, даже для первого: http://jsfiddle.net/gratiafide/kgstubtn/9/ Я думаю, вам понадобится использовать «split()» и создать новый объект Date От этого. – user3089840

ответ

2

ОБНОВЛЕНО

Вот один из способов сделать это вручную:

http://jsfiddle.net/gratiafide/kgstubtn/18/

Javascript:

var firstDate = '13/11/2015 13:27:24'; 
var secondDate = '07/11/2015 13:19:45'; 

document.getElementById("myBtn").addEventListener("click", function() { 
    var splitHalf = firstDate.split(" "); 
    var splitCalendar = splitHalf[0].split("/"); 
    var splitMinutes = splitHalf[1].split(":"); 
    var date = splitCalendar[0] + "/" + splitCalendar[1] + "/" + splitCalendar[2] + " " + splitMinutes[0] + ":" + splitMinutes[1]; 
    document.getElementById("demo").innerHTML = date; 
}); 

HTML:

<p>Click the button to display your date formatted correctly.</p> 

<button id="myBtn">Try it</button> 

<p id="demo"></p> 
+0

Получает мой голос за мышление вне коробки. Но вы можете просто обрезать секунды и сделать с ними: 'date.replace (/: \ d \ d $ /, '')'. ;-) – RobG

+0

Хороший момент и спасибо за голосование. Выполнение такого действия дает вам больше возможностей, если вы хотите изменить формат в будущем. – user3089840

0

Существует пробел после secondDate. Убери это.

var dateDisplay2 = Date.parse(secondDate).toString("dd/MM/yyyy HH:mm"); 
+0

Нет, не делай этого. [* Date.parse *] (http://www.ecma-international.org/ecma-262/6.0/#sec-date.parse) не требуется каким-либо стандартом для правильного анализа строки в OP. Кроме того, он возвращает число, а не дату, поэтому вы вызываете * Number.prototype.toString *. Стандарт ECMA-262 не требует, чтобы метод [* toString *] (http://www.ecma-international.org/ecma-262/6.0/#sec-date.prototype.tostring) принимал любые аргументы, он полностью зависит от реализации поэтому аргумент, скорее всего, игнорируется. – RobG

+0

@RobG да вы правы – AnNaMaLaI

-1

Просто используйте новую дату (строку) и строку даты передачи.

Благодаря

2

вар dateDisplay1 = Date.parse (firstDate) .ToString ("дд/ММ/YYYY HH: мм");

Здесь есть несколько вопросов.

Анализ строк даты в значительной степени зависит от реализации и где следующие стандарты могут приводить к непоследовательным результатам. Вы должны вручную анализировать строки даты, библиотека может помочь, но 2-строчная функция будет достаточной, если у вас есть только один формат и убедитесь, что это действительная дата (см. Ниже). Для проверки допустимой даты используется только одна дополнительная строка.

Date.parse возвращает число, которое является значением времени, поэтому Date.parse(...).toString() звонит Number.prototype.toString где проходил аргумент десятичную. Так если Date.parse возвращает соответствующее значение, то:

new Date(Date.parse(...)).toString() 

не потребуется.

Если вы хотите представить строку даты в определенном формате, вы можете проверить поддержку для internationalization API и использовать ее и вернуться к своей собственной функции (или просто использовать свой собственный), например.

function parseDMY(s) { 
 
    var b = s.split(/\D+/); 
 
    return new Date(b[2], b[1]-1, b[0], b[3], b[4], b[5]); 
 
} 
 

 
function formatDateDMYhm(d) { 
 

 
    // Use internationalization API if available 
 
    if (typeof Intl == 'object' && typeof Intl.DateTimeFormat == 'function') { 
 
    options = { 
 
     year: 'numeric', month: '2-digit', day: '2-digit', 
 
     hour: '2-digit', minute: '2-digit', /* second: '2-digit', */ 
 
     hour12: false 
 
    }; 
 
    return d.toLocaleString('en-GB', options); 
 
    } 
 

 
    // Otherwise, use bespoke function  
 
    function z(n){return (n<10? '0':'') + n} 
 
    return z(d.getDate()) + '/' + z(d.getMonth()) + '/' + d.getFullYear() + 
 
     ' ' + z(d.getHours()) + ':' + z(d.getMinutes()); 
 
} 
 

 
var firstDate ='13/11/2015 13:27:24'; 
 
var secondDate ='07/11/2015 13:19:45'; 
 

 
document.write(formatDateDMYhm(parseDMY(firstDate)) + '<br>'); 
 
document.write(formatDateDMYhm(parseDMY(secondDate)));

Хотя, если используется интернационализация API, он вставляет дополнительную запятую после даты в некоторых браузерах (например, Chrome), но не другие (например, IE), поэтому даже при использовании стандартов не обязательно производят «стандартный» результат. Может быть, он не должен использоваться в этом случае. Использование имени месяца гораздо менее неоднозначно, поэтому подумайте об использовании этого, например, 13-ноя-2015 13:27.

+0

А ваш ответ был очень похож! :) +1 назад на ya – user3089840

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