De pe server primesc un datetime variabilă în acest format: 6/29/2011 4:52:48 PM
și este în ora UTC. Vreau să-l convertească la curent browser-ul utilizatorului timp folosind JavaScript.
Cum acest lucru poate fi realizat folosind JavaScript sau jQuery?
Din punctul meu de vedere servere ar trebui să întotdeauna, în cazul general se întoarcă un datetime în standardizate ISO 8601-format.
Mai multe informatii aici:
ÎN acest caz, serverul va reveni `'2011-06-29T16:52:48.000 Z' care ar alimenta direct în JS Data de obiect.
var utcDate = '2011-06-29T16:52:48.000Z'; // ISO-8601 formatted date returned from server
var localDate = new Date(utcDate);
Anii localDate
va fi în dreptul ora locală care, în cazul meu ar fi două ore mai târziu (DK timp).
Ai really don't trebuie să faci toate astea parsarea care doar complică lucrurile, atâta timp cât sunt în concordanță cu ceea ce format să se aștepte de la server.
Aceasta este o soluție universală:
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;
}
Utilizare:
var date = convertUTCDateToLocalDate(new Date(date_string_you_received));
Afișează data pe client local de setare:
date.toLocaleString();
Pune această funcție în cap:
<script type="text/javascript">
function localize(t)
{
var d=new Date(t+" UTC");
document.write(d.toString());
}
</script>
Apoi genera următoarele informații pentru fiecare dată în corpul paginii dvs.:
<script type="text/javascript">localize("6/29/2011 4:52:48 PM");</script>
Pentru a elimina GMT fus orar, modificați următoarea linie:
document.write(d.toString().replace(/GMT.*/g,""));
Pentru mine soluțiile de mai sus nu't de lucru.
Cu IE UTC-data-timp de conversie de la nivel local este puțin mai complicat.
Pentru mine, data-data la web API este '2018-02-15T05:37:26.007'
și am vrut să converti ca pe zona de fus orar local asa ca am folosit codul de mai jos în JavaScript.
var createdDateTime = new Date('2018-02-15T05:37:26.007' + 'Z');
După ce a încercat alte câteva postat aici fara rezultate bune, acest lucru părea să lucreze pentru mine:
convertUTCDateToLocalDate: function (date) {
return new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds()));
}
Și acest lucru funcționează pentru a merge în sens invers, de la nivel Local Data la UTC:
convertLocalDatetoUTCDate: function(date){
return new Date(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate(), date.getUTCHours(), date.getUTCMinutes(), date.getUTCSeconds());
}
În cazul în care nu't mintea folosind`moment.js și timpul dumneavoastră este în UTC folosi doar următoarele:
moment.utc('6/29/2011 4:52:48 PM').toDate();
daca timpul nu este în utc, dar orice alt locale cunoscute pentru tine, apoi utilizați următoarele opțiuni:
moment('6/29/2011 4:52:48 PM', 'MM-DD-YYYY', 'fr').toDate();
dacă timpul tău este deja în local, apoi utilizați următoarele opțiuni:
moment('6/29/2011 4:52:48 PM', 'MM-DD-YYYY');
//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;
}
Aceasta este o soluție simplificată bazată pe Adorjan Princ´s răspuns:
function convertUTCDateToLocalDate(date) {
var newDate = new Date(date);
newDate.setMinutes(date.getMinutes() - date.getTimezoneOffset());
return newDate;
}
Utilizare:
var date = convertUTCDateToLocalDate(new Date(date_string_you_received));
Matt's răspunsul lipsește faptul că lumina zilei timp de economii ar putea fi diferite între Data() și data timp este nevoie pentru a converti - aici este soluția mea:
function ConvertUTCTimeToLocalTime(UTCDateString)
{
var convertdLocalTime = new Date(UTCDateString);
var hourOffset = convertdLocalTime.getTimezoneOffset() / 60;
convertdLocalTime.setHours( convertdLocalTime.getHours() + hourOffset );
return convertdLocalTime;
}
Și rezultatele în debugger:
UTCDateString: "2014-02-26T00:00:00"
convertdLocalTime: Wed Feb 26 2014 00:00:00 GMT-0800 (Pacific Standard Time)
Adaugă fusul orar la sfârșitul anului, în acest caz 'UTC':
theDate = new Date( Date.parse('6/29/2011 4:52:48 PM UTC'));
după aceea, utilizați *toLocale() funcția de familii pentru a afișa data în locale-ul corect
theDate.toLocaleString(); // "6/29/2011, 9:52:48 AM"
theDate.toLocaleTimeString(); // "9:52:48 AM"
theDate.toLocaleDateString(); // "6/29/2011"
Un JSON data string (serializat în C#) se pare ca "2015-10-13T18:58:17".
În unghiulare, (următoarele Hulvej) face o localdate
filtru:
myFilters.filter('localdate', function () {
return function(input) {
var date = new Date(input + '.000Z');
return date;
};
})
Apoi, afișează ora locală, cum ar fi:
{{order.createDate | localdate | date : 'MMM d, y h:mm a' }}
Folosind YYYY-MM-DD hh:mm:ss
format :
var date = new Date('2011-06-29T16:52:48+00:00');
date.toString() // "Wed Jun 29 2011 09:52:48 GMT-0700 (PDT)"
Pentru conversia de la YYYY-MM-DD hh:mm:ss
format, asigurați-vă că data urmeze ISO 8601 format.
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)
Important ca lucrurile să rețineți
+hh:mm
, folosind un șir de caractere pentru un fus orar (ex. : 'UTC') nu va funcționa în mai multe browsere. +hh:mm
reprezintă abaterea de la UTC fus orar.@Adorojan's
răspunsul este aproape corect. Dar plus de offset nu este corectă, deoarece valoarea de compensare va fi negativ dacă browser-data este înainte de GMT, și vice-versa.
Mai jos este soluția pe care am venit cu și este de lucru foarte bine pentru mine:
// 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);
}
Am Răspunde la Aceasta, Dacă Nici o vrei de funcția de afișare a convertit timp să specifice id element și se aplică data șir format yyyy-mm-dd aici date1 este string si id-ul este id-ul elementului care timp de gând pentru a afișa.
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();
}
știu că răspunsul a fost deja acceptat, dar eu am ajuns aici din cauza google si am rezolvat cu obtinerea de inspirație de acceptat răspuns, așa că am vrut să-l împărtășească, dacă cineva nevoie.
Bazat pe @digitalbath răspunsul, aici este o mică funcție pentru a apuca UTC timestamp și afișa ora locală într-un anumit element de DOM (folosind jQuery pentru aceasta ultima parte):
<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>
Puteți să-l face cu ajutorul moment.js fișier.
Simplu sa ai doar menționează locul de fus orar.
Exemplu: Dacă doriți pentru a converti datetime să-Asia/Kolkata fus orar,trebuie să menționezi numele de fus orar loc obținute din moment.js
var UTCDateTime="Your date obtained from UTC";
var ISTleadTime=(moment.tz(UTCDateTime, "Africa/Abidjan")).tz("Asia/Kolkata").format('YYYY-MM-DD LT');