Лучший способ удалить "EDT" с даты, возвращаемой через javascript, с помощью toLocaleString()

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

Ответ 1

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

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

Метод toLocaleString полагается на базовую операционную систему в датах форматирования. Он преобразует дату в строку, используя соглашение о форматировании операционной системы, в которой запущен script. Например, в Соединенных Штатах месяц появляется до даты (04/15/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 зайдите в MDN Date.

Ответ 2

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

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

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

//тестирование новой Date(). 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 → 6/14/2011 3:15:37 PM
  • Firefox 4.0.1 → Вторник, 14 июня 2011 г. 3:16:33 PM
  • MSIE 8.0 → вторник, 14 июня 2011 г. 3:16:06
  • MSIE 9.0 → вторник, 14 июня 2011 г. 3: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

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

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

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

Ответ 3

var dateWithoutTimeZone = function() {
  return new Date().toLocaleString().replace(/\s*\(?EDT\)?/, '');
};
dateWithoutTimeZone(); // => "Tue Jun 14 2011 2:58:04 GMT-0400"

Ответ 4

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

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

document.write(mydate.toLocaleString().slice(0,-4));