Я относительно новичок в javascript, так что это может быть очень простой вопрос. Есть ли простой способ остановить "EDT" от печати после даты, возвращенной с помощью функции toLocaleString? Спасибо!
Лучший способ удалить "EDT" с даты, возвращаемой через javascript, с помощью 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));