내 웹 페이지에서 HTML5 요소로 작업하고 있습니다. 기본적으로 입력 type="date"
은 날짜를로 표시합니다 YYYY-MM-DD
.
문제는 형식을 다음과 같이 변경할 수 DD-MM-YYYY
있습니까?
dd/mm/yyyy
. moment 또는 jQuery datepicker와 같은 다른 라이브러리를 사용하십시오
내 웹 페이지에서 HTML5 요소로 작업하고 있습니다. 기본적으로 입력 type="date"
은 날짜를로 표시합니다 YYYY-MM-DD
.
문제는 형식을 다음과 같이 변경할 수 DD-MM-YYYY
있습니까?
dd/mm/yyyy
. moment 또는 jQuery datepicker와 같은 다른 라이브러리를 사용하십시오
답변:
형식을 변경할 수 없습니다
유선 형식과 브라우저의 표시 형식을 구별해야합니다.
HTML5 날짜 입력 사양 받는 지칭 RFC 3339 규격 에 해당하는 전체 데이터 형식을 지정 : yyyy-mm-dd
. 자세한 내용 은 RFC 3339 사양의 섹션 5.6 을 참조하십시오.
이 형식은 value
HTML 속성과 DOM 속성에서 사용되며 일반적인 양식 제출시 사용됩니다.
브라우저는 날짜 입력 방식에 제한이 없습니다. Chrome 작성시 Edge, Firefox 및 Opera는 날짜를 지원합니다 ( 여기 참조 ). 모두 날짜 선택기를 표시하고 입력 필드에서 텍스트의 형식을 지정합니다.
데스크탑 장치
Chrome, Firefox 및 Opera의 경우 입력 필드 텍스트의 형식은 브라우저의 언어 설정을 기반으로합니다. Edge의 경우 Windows 언어 설정을 기반으로합니다. 안타깝게도 모든 웹 브라우저는 운영 체제에 구성된 날짜 형식을 무시합니다. 나에게 이것은 매우 이상한 행동 이며이 입력 유형을 사용할 때 고려해야 할 사항입니다. 예를 들어, 운영 체제 또는 브라우저 언어가 설정된 네덜란드 사용자는 en-us
다음 01/30/2019
과 같은 형식 대신 표시 됩니다 30-01-2019
.
Internet Explorer 9, 10 및 11은 유선 형식의 텍스트 입력 필드를 표시합니다.
휴대 기기
특히 Android 용 Chrome의 경우 형식은 Android 표시 언어를 기반으로합니다. 나는 이것을 확인할 수는 없지만 다른 브라우저에서도 마찬가지라고 생각합니다.
이 질문은 웹 영역에서 상당히 많은 일이 일어 났으며 가장 흥미로운 것은 웹 구성 요소 의 착륙입니다 . 이제 필요에 맞게 설계된 사용자 정의 HTML5 요소를 사용하여이 문제를 우아하게 해결할 수 있습니다 . HTML 태그의 작업을 재정의 / 변경하려면 shadow dom을 사용하여 작업하십시오 .
좋은 소식은 이미 사용 가능한 상용구가 많기 때문에 처음부터 솔루션을 만들 필요가 없다는 것입니다. 그냥 확인 사람들이 구축하고 무엇을 거기에서 아이디어를 얻을.
다음과 같은 태그를 사용할 수 있도록 폴리머에 대한 datetime-input 과 같은 단순하고 작동하는 솔루션으로 시작할 수 있습니다 .
<date-input date="{{date}}" timezone="[[timezone]]"></date-input>
또는 원하는 형식 및 로케일, 콜백 및 긴 옵션 목록 (원하는대로 사용자 정의 API를 모두 사용할 수 있음)을 사용하여 원하는대로 창의적이고 완전한 팝업 날짜 선택기를 얻을 수 있습니다.
표준을 준수하며 해킹이 없습니다.
더블은-확인 가능 polyfills 무엇인지, 브라우저 / 버전 들이 지원을하고 사용자 기반을 충분히 %를 포함하면 기회는 반드시 사용자의 대부분을 다룰 그래서 ... 그것은 2018 년이다.
그것이 도움이되기를 바랍니다!
앞에서 언급했듯이 공식적으로 형식을 변경할 수 없습니다. 그러나 필드의 스타일을 지정할 수 있으므로 (작은 JS 도움으로) 원하는 형식으로 날짜를 표시합니다. 날짜 입력을 조작 할 수있는 가능성 중 일부는 이런 방식으로 손실되지만 형식을 강제로 적용하려는 욕구가 더 큰 경우이 해결 방법이 될 수 있습니다. 날짜 필드는 다음과 같이 유지됩니다.
<input type="date" data-date="" data-date-format="DD MMMM YYYY" value="2015-08-09">
나머지는 약간의 CSS와 JS입니다 : http://jsfiddle.net/g7mvaosL/
$("input").on("change", function() {
this.setAttribute(
"data-date",
moment(this.value, "YYYY-MM-DD")
.format( this.getAttribute("data-date-format") )
)
}).trigger("change")
input {
position: relative;
width: 150px; height: 20px;
color: white;
}
input:before {
position: absolute;
top: 3px; left: 3px;
content: attr(data-date);
display: inline-block;
color: black;
}
input::-webkit-datetime-edit, input::-webkit-inner-spin-button, input::-webkit-clear-button {
display: none;
}
input::-webkit-calendar-picker-indicator {
position: absolute;
top: 3px;
right: 0;
color: black;
opacity: 1;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.min.js"></script>
<script src="https://code.jquery.com/jquery-3.4.1.min.js"></script>
<input type="date" data-date="" data-date-format="DD MMMM YYYY" value="2015-08-09">
데스크톱 용 Chrome과 iOS의 Safari에서 잘 작동합니다 (터치 스크린의 기본 날짜 조작기가 탁월한 IMHO이므로 특히 바람직합니다). 다른 사람은 확인하지 않았지만 웹킷에서 실패 할 것으로 예상하지 마십시오.
MMMM YYYY DD
만 DD
적용됩니다. -1에, 죄송합니다
moment
함수 의 입력 형식을 변경했으며 갈 길이 없습니다. 변경 data-date-format="DD-YYYY-MM"
한 다음 09-2015-08이 표시됩니다.
HTML5 사양에는 형식을 재정의하거나 수동으로 지정하는 방법이 포함되어 있지 않습니다.
value
속성이 와이어 형식과 일치 합니까? 아니면 사용자에게 표시되는 내용입니까?
value
속성은 항상 와이어 형식과 일치합니다.
브라우저가 현지 날짜 형식을 사용한다고 생각합니다. 변경할 수 있다고 생각하지 마십시오. 물론 사용자 정의 날짜 선택기를 사용할 수 있습니다.
마지막 베타 버전의 Chrome은 최종적으로 입력을 사용 type=date
하며 형식은 DD-MM-YYYY
입니다.
따라서 특정 형식을 적용 할 수있는 방법이 있어야합니다. HTML5 웹 페이지를 개발 중이며 날짜 검색이 다른 형식으로 실패합니다.
M-D-Y
이상한 형식입니다. 나는 미국인들이 다른 사람들에게 그것을 강요하는 것을 보지 못했습니다. :-)
빠른 솔루션 이 필요한 경우 시도하십시오. yyyy-mm-dd를 "dd-9 월 -2016"으로 설정하려면
1) 입력 한 스팬 클래스 근처에 레이블을 작성하십시오.
2) 사용자가 날짜를 변경할 때마다 또는 데이터에서로드해야 할 때마다 레이블을 업데이트하십시오.
IE11 +의 웹킷 브라우저 모바일 및 포인터 이벤트에서 작동 하려면 jQuery 및 Jquery Date가 필요합니다.
$("#date_input").on("change", function () {
$(this).css("color", "rgba(0,0,0,0)").siblings(".datepicker_label").css({ "text-align":"center", position: "absolute",left: "10px", top:"14px",width:$(this).width()}).text($(this).val().length == 0 ? "" : ($.datepicker.formatDate($(this).attr("dateformat"), new Date($(this).val()))));
});
#date_input{text-indent: -500px;height:25px; width:200px;}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.2/jquery.min.js"></script>
<script src="http://code.jquery.com/ui/1.9.2/jquery-ui.min.js"></script>
<input id ="date_input" dateformat="d M y" type="date"/>
<span class="datepicker_label" style="pointer-events: none;"></span>
많은 토론을 읽은 후 간단한 솔루션을 준비했지만 많은 자바 스크립트 인 Jquery와 CSS를 많이 사용하고 싶지 않습니다.
HTML 코드 :
<input type="date" id="dt" onchange="mydate1();" hidden/>
<input type="text" id="ndt" onclick="mydate();" hidden />
<input type="button" Value="Date" onclick="mydate();" />
CSS 코드 :
#dt {
text-indent: -500px;
height: 25px;
width: 200px;
}
자바 스크립트 코드 :
function mydate() {
//alert("");
document.getElementById("dt").hidden = false;
document.getElementById("ndt").hidden = true;
}
function mydate1() {
d = new Date(document.getElementById("dt").value);
dt = d.getDate();
mn = d.getMonth();
mn++;
yy = d.getFullYear();
document.getElementById("ndt").value = dt + "/" + mn + "/" + yy
document.getElementById("ndt").hidden = false;
document.getElementById("dt").hidden = true;
}
산출:
말했듯이 <input type=date ... >
대부분의 브라우저에서이 기능이 완전히 구현되지 않았으므로 브라우저 (크롬)와 같은 웹킷에 대해 이야기 해 봅시다.
Linux를 사용하면 환경 변수를 변경하여 변경할 수 있습니다 LANG
. LC_TIME
할 수는 없다 (적어도 나를 위해) 작동하는 것 같다.
입력 할 수 있습니다 locale
터미널에 하여 현재 값을 볼 수 있습니다. 나는 같은 개념이 IOS에 적용될 수 있다고 생각합니다.
예 : 사용 :
LANG=en_US.UTF-8 /opt/google/chrome/chrome
날짜는 다음과 같이 표시됩니다 mm/dd/yyyy
사용 :
LANG=pt_BR /opt/google/chrome/chrome
날짜는 다음과 같이 표시됩니다 dd/mm/yyyy
http://lh.2xlibre.net/locale/pt_BR/ 을 사용할 수 있습니다 (변경pt_BR
당신이 원하는 날짜를 당신에게 자신 만의 로케일을 만들고 형식으로 로케일을).
기본 시스템 날짜 변경 방법에 대한 고급 참조는 https://ccollins.wordpress.com/2009/01/06/how-to-change-date-formats-on-ubuntu/ 및 https : // askubuntu입니다. com / questions / 21316 / how-can-i-customize-a-system-locale
다음을 사용하여 실제 날짜 형식을 볼 수 있습니다 date
.
$ date +%x
01-06-2015
그러나로 LC_TIME
하고 d_fmt
슬프게도, (그리고 나는 그것이 웹킷 또는 크롬에 버그라고 생각) 크롬에 의해 거부 될 것으로 보인다 는 일을하지 않습니다 . : '(
불행히도 응답은 IF LANG
환경 변수가 문제를 해결하지 못하지만 아직 방법이 없다는 것입니다.
브라우저는 사용자의 시스템 날짜 형식에서 날짜 입력 형식을 얻습니다.
(지원되는 브라우저, Chrome, Edge에서 테스트되었습니다.)
날짜 제어 스타일을 변경하기 위해 현재 스펙에 의해 정의 된 표준이 없으므로 브라우저에서 동일한 방식으로 구현할 수 없습니다.
그러나 시스템 설정에서 날짜 형식을 가져 오는이 동작이 더 좋으며이를 무시하지 말 것을 강력히 권장합니다. 그 이유는 사용자가 시스템 / 장치에서 구성한 것과 동일하고 로케일에 익숙하거나 날짜 입력 형식을 볼 수 있기 때문입니다.
이것은 사용자가 볼 수있는 화면의 UI 형식 일 뿐이며, 자바 스크립트 / 백엔드에서 항상 원하는 형식을 유지할 수 있습니다.
사용자의 컴퓨터 또는 모바일 기본 날짜 형식을 사용하는 웹 키트 브라우저를 변경할 수 없습니다. 그러나 jquery와 jquery UI를 사용할 수 있다면 날짜 선택기가 있으며 개발자가 원하는대로 원하는 형식으로 표시 할 수 있습니다. jquery UI 날짜 선택기에 대한 링크는이 페이지 http://jqueryui.com/datepicker/에 있습니다. 있습니다. 데모, 코드 및 문서 또는 설명서 링크를 찾을 수 있습니다.
편집 : 크롬은 기본적으로 시스템 설정과 동일한 언어 설정을 사용하지만 사용자는 변경할 수 있지만 개발자는 사용자가 강제로 변경할 수 없으므로 웹을 검색 할 수 있다고 말하는 다른 js 솔루션을 사용해야합니다 자바 스크립트 날짜 선택기 또는 jquery 날짜 선택기와 같은 쿼리
형식을 변경하는 방법을 찾았습니다. 까다로운 방법으로 CSS 코드를 사용하여 날짜 입력 필드의 모양을 변경했습니다.
input[type="date"]::-webkit-datetime-edit, input[type="date"]::-webkit-inner-spin-button, input[type="date"]::-webkit-clear-button {
color: #fff;
position: relative;
}
input[type="date"]::-webkit-datetime-edit-year-field{
position: absolute !important;
border-left:1px solid #8c8c8c;
padding: 2px;
color:#000;
left: 56px;
}
input[type="date"]::-webkit-datetime-edit-month-field{
position: absolute !important;
border-left:1px solid #8c8c8c;
padding: 2px;
color:#000;
left: 26px;
}
input[type="date"]::-webkit-datetime-edit-day-field{
position: absolute !important;
color:#000;
padding: 2px;
left: 4px;
}
<input type="date" value="2019-12-07">
게시물이 2 개월 전에 활성화되었으므로 그래서 나는 또한 의견을 줄 생각했습니다.
제 경우에는 dd / mm / yyyy 형식으로 된 카드 리더에서 날짜를받습니다.
내가하는 일 예 :
var d="16/09/2019" // date received from card
function filldate(){
document.getElementById('cardexpirydate').value=d.split('/').reverse().join("-");
}
<input type="date" id="cardexpirydate">
<br /><br />
<input type="button" value="fill the date" onclick="filldate();">
코드가하는 일 :
이 모든 것은 한 줄로 이루어집니다.
나는 이것이 도움이 될 것이라고 생각했기 때문에 이것을 썼다.
<input>
사용하여 값을 보여주기를.
2 년 전에이 문제를 검색했으며 Google 검색 으로이 질문으로 다시 연결됩니다. 순수한 JavaScript로 이것을 처리하는 데 시간을 낭비하지 마십시오. 나는 그것을 만들려고 시간을 낭비합니다 dd/mm/yyyy
. 모든 브라우저에 맞는 완벽한 솔루션은 없습니다. 따라서 jQuery
datepicker 를 사용 하거나 대신 클라이언트에게 기본 날짜 형식으로 작업 하도록 지시하는 것이 좋습니다.
오래된 게시물이지만 Google 검색의 첫 번째 제안, 짧은 답변 아니요, 권장 답변 사용자 정의 날짜 piker와 같은 올바른 제안은 텍스트 상자를 사용하여 날짜 입력을 시뮬레이션하고 원하는 형식을 수행하는 것입니다. , 여기 코드가 있습니다
<html>
<body>
date :
<span style="position: relative;display: inline-block;border: 1px solid #a9a9a9;height: 24px;width: 500px">
<input type="date" class="xDateContainer" onchange="setCorrect(this,'xTime');" style="position: absolute; opacity: 0.0;height: 100%;width: 100%;"><input type="text" id="xTime" name="xTime" value="dd / mm / yyyy" style="border: none;height: 90%;" tabindex="-1"><span style="display: inline-block;width: 20px;z-index: 2;float: right;padding-top: 3px;" tabindex="-1">▼</span>
</span>
<script language="javascript">
var matchEnterdDate=0;
//function to set back date opacity for non supported browsers
window.onload =function(){
var input = document.createElement('input');
input.setAttribute('type','date');
input.setAttribute('value', 'some text');
if(input.value === "some text"){
allDates = document.getElementsByClassName("xDateContainer");
matchEnterdDate=1;
for (var i = 0; i < allDates.length; i++) {
allDates[i].style.opacity = "1";
}
}
}
//function to convert enterd date to any format
function setCorrect(xObj,xTraget){
var date = new Date(xObj.value);
var month = date.getMonth();
var day = date.getDate();
var year = date.getFullYear();
if(month!='NaN'){
document.getElementById(xTraget).value=day+" / "+month+" / "+year;
}else{
if(matchEnterdDate==1){document.getElementById(xTraget).value=xObj.value;}
}
}
</script>
</body>
</html>
1-이 방법은 날짜 유형을 지원하는 브라우저에서만 작동합니다.
2-JS 코드의 첫 번째 기능은 날짜 유형을 지원하지 않고 모양을 일반 텍스트 입력으로 설정하는 브라우저를위한 것입니다.
3- 페이지에서 여러 날짜 입력에이 코드를 사용하려면 함수 호출과 입력 자체에서 텍스트 입력의 ID "xTime"을 다른 것으로 변경하고 물론 원하는 입력 이름을 사용하십시오. 양식 제출.
두 번째 함수 인 4에서 day + "/"+ month + "/"+ year (예 : year + "/"+ month + "/"+ day) 대신 원하는 형식을 사용할 수 있으며 텍스트 입력에서 자리 표시 자 또는 값을 페이지가로드 될 때 사용자의 yyyy / mm / dd