서버에서 다음 형식의 datetime 변수를 얻습니다 .UTC 6/29/2011 4:52:48 PM
시간입니다. JavaScript를 사용하여 현재 사용자의 브라우저 시간으로 변환하고 싶습니다.
JavaScript 또는 jQuery를 사용하여 어떻게 수행 할 수 있습니까?
서버에서 다음 형식의 datetime 변수를 얻습니다 .UTC 6/29/2011 4:52:48 PM
시간입니다. JavaScript를 사용하여 현재 사용자의 브라우저 시간으로 변환하고 싶습니다.
JavaScript 또는 jQuery를 사용하여 어떻게 수행 할 수 있습니까?
답변:
자바 스크립트에서 날짜로 변환하기 전에 문자열에 'UTC'를 추가하십시오.
var date = new Date('6/29/2011 4:52:48 PM UTC');
date.toString() // "Wed Jun 29 2011 09:52:48 GMT-0700 (PDT)"
!
주의 !
_ ... 날짜 날짜 생성자 문자열의 구문 분석 (그리고 다음 Date.parse, 그들은 동일) 강력 ... 때문에 브라우저 차이와 불일치 권장하지 않습니다 (아마 더 많은 사실 2011 년이었다)
필자의 관점에서 서버는 일반적으로 표준화 된 ISO 8601 형식으로 날짜 시간을 반환해야 합니다 .
여기에 더 많은 정보가 있습니다 :
이 경우 서버는 '2011-06-29T16:52:48.000Z'
JS Date 객체로 직접 피드를 반환 합니다.
var utcDate = '2011-06-29T16:52:48.000Z'; // ISO-8601 formatted date returned from server
var localDate = new Date(utcDate);
은 localDate
내 경우에는 2 시간 후에 (DK 시간)이 될 것입니다 올바른 현지 시간에있을 것입니다.
당신은 정말 한 서버에서 기대하는 어떤 형식과 일치로, 모두에게 단지 물건을 복잡하게이 구문 분석 할 필요가 없습니다.
DateTime
개체를 형식화 할 수 있습니다 .toString("o")
. msdn.microsoft.com/ko-kr/library/zdtaw1bw(v=vs.110).aspx 자바 스크립트는 new Date().toISOString()
입니다. developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
이것은 보편적 인 해결책입니다.
function convertUTCDateToLocalDate(date) {
var newDate = new Date(date.getTime()+date.getTimezoneOffset()*60*1000);
var offset = date.getTimezoneOffset() / 60;
var hours = date.getHours();
newDate.setHours(hours - offset);
return newDate;
}
용법:
var date = convertUTCDateToLocalDate(new Date(date_string_you_received));
클라이언트 로컬 설정에 따라 날짜를 표시하십시오.
date.toLocaleString();
이 기능을 머리에 넣으십시오.
<script type="text/javascript">
function localize(t)
{
var d=new Date(t+" UTC");
document.write(d.toString());
}
</script>
그런 다음 페이지 본문에서 각 날짜에 대해 다음을 생성하십시오.
<script type="text/javascript">localize("6/29/2011 4:52:48 PM");</script>
GMT 및 시간대를 제거하려면 다음 행을 변경하십시오.
document.write(d.toString().replace(/GMT.*/g,""));
좋은 결과없이 여기에 게시 된 다른 몇 가지를 시도한 후에 이것은 효과가있는 것 같습니다.
convertUTCDateToLocalDate: function (date) {
return new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds()));
}
그리고 이것은 로컬 날짜에서 UTC까지 반대 방향으로 진행됩니다.
convertLocalDatetoUTCDate: function(date){
return new Date(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate(), date.getUTCHours(), date.getUTCMinutes(), date.getUTCSeconds());
}
new Date(+date + date.getTimezoneOffset() * 6e4)
. ;-)
끝에 시간대를 추가하십시오 (이 경우 'UTC').
theDate = new Date( Date.parse('6/29/2011 4:52:48 PM UTC'));
그런 다음 toLocale () * 함수 패밀리를 사용하여 날짜를 올바른 로케일로 표시하십시오.
theDate.toLocaleString(); // "6/29/2011, 9:52:48 AM"
theDate.toLocaleTimeString(); // "9:52:48 AM"
theDate.toLocaleDateString(); // "6/29/2011"
Matt의 대답에는 일광 절약 시간이 Date ()와 변환 해야하는 날짜 시간이 다를 수 있다는 사실이 없습니다. 여기 내 솔루션이 있습니다.
function ConvertUTCTimeToLocalTime(UTCDateString)
{
var convertdLocalTime = new Date(UTCDateString);
var hourOffset = convertdLocalTime.getTimezoneOffset() / 60;
convertdLocalTime.setHours( convertdLocalTime.getHours() + hourOffset );
return convertdLocalTime;
}
그리고 디버거의 결과 :
UTCDateString: "2014-02-26T00:00:00"
convertdLocalTime: Wed Feb 26 2014 00:00:00 GMT-0800 (Pacific Standard Time)
//Covert datetime by GMT offset
//If toUTC is true then return UTC time other wise return local time
function convertLocalDateToUTCDate(date, toUTC) {
date = new Date(date);
//Local time converted to UTC
console.log("Time: " + date);
var localOffset = date.getTimezoneOffset() * 60000;
var localTime = date.getTime();
if (toUTC) {
date = localTime + localOffset;
} else {
date = localTime - localOffset;
}
date = new Date(date);
console.log("Converted time: " + date);
return date;
}
이것은 Adorjan Princ의 답변을 바탕으로 한 단순화 된 솔루션입니다.
function convertUTCDateToLocalDate(date) {
var newDate = new Date(date);
newDate.setMinutes(date.getMinutes() - date.getTimezoneOffset());
return newDate;
}
용법:
var date = convertUTCDateToLocalDate(new Date(date_string_you_received));
나에게 가장 간단한 것은
datetime.setUTCHours(datetime.getHours());
datetime.setUTCMinutes(datetime.getMinutes());
(첫 번째 줄이면 충분하지만 몇 시간 만에 시간대가 있음을 알았습니다)
new Date('date string')
한 다음이 두 줄을 추가하면 서버의 UTC 타임 스탬프에서 완전히 벗어난 시간으로 되돌아 오는 것처럼 보입니다. 사용자의 현지 시간과 일치하도록 조정했습니다. 나도 시간 단위의 이상한 분수에 대해 걱정할 필요가있다 ... 그것이 항상 완벽하게 유지되는지 확실하지 않다 ...
C #에서 직렬화 된 JSON 날짜 문자열은 "2015-10-13T18 : 58 : 17"과 같습니다.
각도에서 (Hulbej를 따라) localdate
필터를 만듭니다 .
myFilters.filter('localdate', function () {
return function(input) {
var date = new Date(input + '.000Z');
return date;
};
})
그런 다음 다음과 같이 현지 시간을 표시하십시오.
{{order.createDate | localdate | date : 'MMM d, y h:mm a' }}
YYYY-MM-DD hh:mm:ss
형식 사용 :
var date = new Date('2011-06-29T16:52:48+00:00');
date.toString() // "Wed Jun 29 2011 09:52:48 GMT-0700 (PDT)"
YYYY-MM-DD hh:mm:ss
형식 에서 변환 하려면 날짜가 ISO 8601 형식을 따르십시오 .
Year:
YYYY (eg 1997)
Year and month:
YYYY-MM (eg 1997-07)
Complete date:
YYYY-MM-DD (eg 1997-07-16)
Complete date plus hours and minutes:
YYYY-MM-DDThh:mmTZD (eg 1997-07-16T19:20+01:00)
Complete date plus hours, minutes and seconds:
YYYY-MM-DDThh:mm:ssTZD (eg 1997-07-16T19:20:30+01:00)
Complete date plus hours, minutes, seconds and a decimal fraction of a second
YYYY-MM-DDThh:mm:ss.sTZD (eg 1997-07-16T19:20:30.45+01:00) where:
YYYY = four-digit year
MM = two-digit month (01=January, etc.)
DD = two-digit day of month (01 through 31)
hh = two digits of hour (00 through 23) (am/pm NOT allowed)
mm = two digits of minute (00 through 59)
ss = two digits of second (00 through 59)
s = one or more digits representing a decimal fraction of a second
TZD = time zone designator (Z or +hh:mm or -hh:mm)
유의해야 할 사항
T
. 일부 브라우저에서는 공백이 작동하지 않습니다.+hh:mm
을 사용하여 시간대를 설정해야합니다. 시간대에 대한 문자열 (예 : 'UTC')을 사용하면 많은 브라우저에서 작동하지 않습니다. +hh:mm
UTC 시간대의 오프셋을 나타냅니다.@Adorojan's
대답은 거의 맞습니다. 그러나 브라우저 날짜가 GMT보다 빠르거나 그 반대 인 경우 오프셋 값이 음수이므로 오프셋 추가가 올바르지 않습니다. 다음은 내가 함께 제공하고 완벽하게 잘 작동하는 솔루션입니다.
// Input time in UTC
var inputInUtc = "6/29/2011 4:52:48";
var dateInUtc = new Date(Date.parse(inputInUtc+" UTC"));
//Print date in UTC time
document.write("Date in UTC : " + dateInUtc.toISOString()+"<br>");
var dateInLocalTz = convertUtcToLocalTz(dateInUtc);
//Print date in local time
document.write("Date in Local : " + dateInLocalTz.toISOString());
function convertUtcToLocalTz(dateInUtc) {
//Convert to local timezone
return new Date(dateInUtc.getTime() - dateInUtc.getTimezoneOffset()*60*1000);
}
변환 된 시간을 특정 id 요소로 표시하고 날짜 형식 문자열 yyyy-mm-dd를 적용하는 함수를 원한다면 date1은 문자열이고 ids는 표시 할 시간의 요소 ID입니다.
function convertUTCDateToLocalDate(date1, ids)
{
var newDate = new Date();
var ary = date1.split(" ");
var ary2 = ary[0].split("-");
var ary1 = ary[1].split(":");
var month_short = Array('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec');
newDate.setUTCHours(parseInt(ary1[0]));
newDate.setUTCMinutes(ary1[1]);
newDate.setUTCSeconds(ary1[2]);
newDate.setUTCFullYear(ary2[0]);
newDate.setUTCMonth(ary2[1]);
newDate.setUTCDate(ary2[2]);
ids = document.getElementById(ids);
ids.innerHTML = " " + newDate.getDate() + "-" + month_short[newDate.getMonth() - 1] + "-" + newDate.getFullYear() + " " + newDate.getHours() + ":" + newDate.getMinutes() + ":" + newDate.getSeconds();
}
나는 대답이 이미 받아 들여 졌다는 것을 알고 있지만 나는 여기에 구글의 원인을 얻었고 나는 받아 들여진 대답에서 영감을 얻는 것으로 해결 했으므로 누군가가 필요하다면 그냥 공유하고 싶었다.
@digitalbath 답변을 기반으로 UTC 타임 스탬프를 가져 와서 주어진 DOM 요소에 현지 시간을 표시하는 작은 함수가 있습니다 (이 마지막 부분에 jQuery 사용).
https://jsfiddle.net/moriz/6ktb4sv8/1/
<div id="eventTimestamp" class="timeStamp">
</div>
<script type="text/javascript">
// Convert UTC timestamp to local time and display in specified DOM element
function convertAndDisplayUTCtime(date,hour,minutes,elementID) {
var eventDate = new Date(''+date+' '+hour+':'+minutes+':00 UTC');
eventDate.toString();
$('#'+elementID).html(eventDate);
}
convertAndDisplayUTCtime('06/03/2015',16,32,'eventTimestamp');
</script>
UTC 시대를 가져 와서 클라이언트 시스템 시간대를 변환하고 d / m / YH : i : s (PHP 날짜 함수와 같은) 형식으로 반환하는 멋진 작은 스크립트를 작성했습니다.
getTimezoneDate = function ( e ) {
function p(s) { return (s < 10) ? '0' + s : s; }
var t = new Date(0);
t.setUTCSeconds(e);
var d = p(t.getDate()),
m = p(t.getMonth()+1),
Y = p(t.getFullYear()),
H = p(t.getHours()),
i = p(t.getMinutes()),
s = p(t.getSeconds());
d = [d, m, Y].join('/') + ' ' + [H, i, s].join(':');
return d;
};
당신은 momentjs 를 사용할 수 있으며 , moment(date).format()
항상 현지 날짜로 결과를 제공 합니다 .
보너스 , 원하는 방식으로 형식을 지정할 수 있습니다. 예를 들어.
moment().format('MMMM Do YYYY, h:mm:ss a'); // September 14th 2018, 12:51:03 pm
moment().format('dddd'); // Friday
moment().format("MMM Do YY");
자세한 내용은 Moment js 웹 사이트를 참조하십시오
모든 시간대를 현지 시간으로 변환하는 하나의 함수를 만들었습니다.
적절한 오프셋 값을 반환하지 않기 때문에 getTimezoneOffset ()을 사용하지 않았습니다.
요구 사항 :
1. npm i moment-timezone
function utcToLocal(utcdateTime, tz) {
var zone = moment.tz(tz).format("Z") // Actual zone value e:g +5:30
var zoneValue = zone.replace(/[^0-9: ]/g, "") // Zone value without + - chars
var operator = zone && zone.split("") && zone.split("")[0] === "-" ? "-" : "+" // operator for addition subtraction
var localDateTime
var hours = zoneValue.split(":")[0]
var minutes = zoneValue.split(":")[1]
if (operator === "-") {
localDateTime = moment(utcdateTime).subtract(hours, "hours").subtract(minutes, "minutes").format("YYYY-MM-DD HH:mm:ss")
} else if (operator) {
localDateTime = moment(utcdateTime).add(hours, "hours").add(minutes, "minutes").format("YYYY-MM-DD HH:mm:ss")
} else {
localDateTime = "Invalid Timezone Operator"
}
return localDateTime
}
utcToLocal("2019-11-14 07:15:37", "Asia/Kolkata")
//Returns "2019-11-14 12:45:37"
필자의 경우 날짜 차이를 초 단위로 찾아야했습니다. 날짜는 UTC 날짜 문자열이므로 현지 날짜 개체로 변환했습니다. 이것이 내가 한 일입니다.
let utc1 = new Date();
let utc2 = null;
const dateForCompare = new Date(valueFromServer);
dateForCompare.setTime(dateForCompare.getTime() - dateForCompare.getTimezoneOffset() *
60000);
utc2 = dateForCompare;
const seconds = Math.floor(utc1 - utc2) / 1000;
function getUTC(str) {
var arr = str.split(/[- :]/);
var utc = new Date(arr[0], arr[1]-1, arr[2], arr[3], arr[4], arr[5]);
utc.setTime(utc.getTime() - utc.getTimezoneOffset()*60*1000)
return utc;
}
방문하는 다른 사람들을 위해-이 함수를 사용하여 UTC 문자열에서 현지 날짜 개체를 얻으려면 DST를 처리하고 IE, IPhone 등에서 작동합니다.
우리는 문자열을 분할했습니다 (일부 브라우저에서는 JS 날짜 구문 분석이 지원되지 않기 때문에) UTC와 차이가 나는 UTC 시간에서 빼서 현지 시간을 제공합니다. 반환 된 오프셋은 DST로 계산되므로 (잘못된 경우 수정하십시오) 변수 "utc"에 해당 시간을 다시 설정합니다. 마지막으로 날짜 개체를 반환하십시오.
Angular에서는 Ben의 대답을 다음과 같이 사용했습니다.
$scope.convert = function (thedate) {
var tempstr = thedate.toString();
var newstr = tempstr.toString().replace(/GMT.*/g, "");
newstr = newstr + " UTC";
return new Date(newstr);
};
편집 : Angular 1.3.0은 날짜 필터에 UTC 지원을 추가했지만 아직 사용하지는 않았지만 더 쉬워야합니다. 형식은 다음과 같습니다.
{{ date_expression | date : format : timezone}}