Лучший способ удалить 'EDT' из даты, возвращенной через JavaScript с помощью toLocaleString () - PullRequest
1 голос
/ 14 июня 2011

Я относительно новичок в javascript, так что это может быть действительно простой вопрос. Есть ли простой способ остановить печать 'EDT' после даты, возвращенной toLocaleString? Спасибо!

Ответы [ 4 ]

5 голосов
/ 14 июня 2011

Невозможно быть уверенным, что вернется toLocaleString;Вы, конечно, не могли гарантировать, что EDT будет отображаться на каждой машине, на которой он запущен, не говоря уже о каких-либо указаниях на часовой пояс.

Из сети разработчиков Mozilla:

toLocaleString метод опирается на базовую операционную систему при форматировании дат.Он преобразует дату в строку, используя соглашение о форматировании операционной системы, в которой выполняется скрипт.Например, в Соединенных Штатах месяц появляется перед датой (15.04.98), тогда как в Германии дата появляется перед месяцем (15.04.98).Если операционная система не соответствует требованиям 2000 года и не использует полный год за годы до 1900 года или более 2000 года, toLocaleString возвращает строку, которая не соответствует требованиям 2000 года.toLocaleString ведет себя аналогично toString при преобразовании года, который операционная система неправильно форматирует.

Один возможный обходной путь будет заключаться в построении пользовательской строки даты с использованием toLocaleDateString и toLocaleTimeString.

// Something to this effect:
var d = new Date();
console.log(d.toLocaleDateString() + " " + d.toLocaleTimeString());

Обычно это не включает часовой пояс в вывод, но даже это не идеально, как вы не знаетекаким будет точный формат вывода.

Таким образом, наилучшим решением будет использование пользовательской функции форматирования даты:

// Add leading-zeros to numbers less than 10[000...]
function padZ(num, n) {
    n = n || 1; // Default assume 10^1
    return num < Math.pow(10, n) ? "0" + num : num;
}

function formattedDate(d) {
    var day = d.getDate();
    var month = d.getMonth() + 1; // Note the `+ 1` -- months start at zero.
    var year = d.getFullYear();
    var hour = d.getHours();
    var min = d.getMinutes();
    var sec = d.getSeconds();
    return month+"/"+day+"/"+year+" "+hour+":"+padZ(min)+":"+padZ(sec);
}

Для более подробного изучения доступныхDate методы, проверьте Date на MDN.

2 голосов
/ 14 июня 2011

Насколько я могу судить, ни один браузер не возвращает 'EDT' из toLocaleString для окон в любом случае, и только Chrome вообще возвращает часовой пояс.

Другие платформы могут назначать строку по-разному.

Моя большая проблема в том, что Chrome использует 24-часовые часы для местного времени.

// тестирование новой даты (). ToLocaleString () (windows 7)

  • Safari 5.0 >> Вторник, 14 июня 2011 г. 15: 13: 43
  • Chrome 9.0.597.98 >> Вторник, 14 июня 2011 г. 15:15:01 GMT-0400 (восточное дневное время)
  • Opera 11.01 >> 14.06.2011 15:15:37
  • Firefox 4.0.1 >> Вторник, 14 июня 2011 г. 15:16:33
  • MSIE 8.0 >>Вторник, 14 июня 2011 г. 15:16:06
  • MSIE 9.0 >> Вторник, 14 июня 2011 г. 15:17:09

Все они возвращают часы: минуты: секунд в группе, чтобы исключить что-либо после того, как вы могли бы:

var d=new Date().toLocaleString();
var s= d.toLocaleString().match(/^[^:]+(:\d\d){2} *(am|pm)\b/i)[0];

returned value: (Chrome)
Tue Jun 14 2011 15:26:11:11

Другой способ - объединить строки даты и времени локали, что, к удивлению, не возвращает часовой пояс для chrome-ноВаш пробег может отличаться.

var D=new Date();
D.toLocaleDateString()+' '+D.toLocaleTimeString()

возвращается Вторник, 14 июня 2011 г. 15:44:35 в Chrome

0 голосов
/ 14 июня 2011

Часовой пояс всегда в конце строки? (Часовой пояс вообще не появляется, когда я пытаюсь.)

Если это так, вы можете использовать метод среза , чтобы удалить последние четыре символа строки (пробел + часовой пояс из 3 символов).

document.write(mydate.toLocaleString().slice(0,-4));
0 голосов
/ 14 июня 2011
var dateWithoutTimeZone = function() {
  return new Date().toLocaleString().replace(/\s*\(?EDT\)?/, '');
};
dateWithoutTimeZone(); // => "Tue Jun 14 2011 2:58:04 GMT-0400"
...