reloj - obtener fecha y hora actual javascript
Obtención de la zona horaria del cliente en JavaScript (23)
¿Cómo puedo recopilar la información de zona horaria del visitante? Necesito el Timezone, así como las horas de desplazamiento GMT.
Como alternativa al new Date().getTimezoneOffset()
moment().format(''zz'')
new Date().getTimezoneOffset()
and moment().format(''zz'')
, también puede usar momentjs :
var offset = moment.parseZone(Date.now()).utcOffset() / 60
console.log(offset);
<script src="https://cdn.jsdelivr.net/momentjs/2.13.0/moment.min.js"></script>
jstimezone también tiene muchos errores y no se mantiene ( https://bitbucket.org/pellepim/jstimezonedetect/issues?status=new&status=open )
Con moment.js :
moment().format(''zz'');
Con momentjs , puedes encontrar la zona horaria actual como
console.log(moment().utcOffset()); // (-240, -120, -60, 0, 60, 120, 240, etc.)
<script src="https://cdn.jsdelivr.net/momentjs/2.13.0/moment.min.js"></script>
Devuelve utc offset en minutos.
En la new Date(
) puede obtener el desplazamiento, para obtener el nombre de la zona horaria que puede hacer:
new Date().toString().replace(/(.*/((.*)/).*)/, ''$2'');
obtienes el valor entre ()
al final de la fecha, que es el nombre de la zona horaria.
Escribí una función en mi proyecto, que devuelve la zona horaria en formato hh:mm
. Espero que esto pueda ayudar a alguien:
function getTimeZone() {
var offset = new Date().getTimezoneOffset(), o = Math.abs(offset);
return (offset < 0 ? "+" : "-") + ("00" + Math.floor(o / 60)).slice(-2) + ":" + ("00" + (o % 60)).slice(-2);
}
// Outputs: +5:00
function getTimeZone() {
var offset = new Date().getTimezoneOffset(), o = Math.abs(offset);
return (offset < 0 ? "+" : "-") + ("00" + Math.floor(o / 60)).slice(-2) + ":" + ("00" + (o % 60)).slice(-2);
}
// See output
document.write(getTimeZone());
Estaba buscando solo la cadena de 3 letras (como "PDT") y probé la respuesta de Márquez, pero tuve que modificarla un poco para la compatibilidad con varios navegadores. Afortunadamente, la cadena es la última coincidencia potencial :)
Esto es lo que hice, en CoffeeScript:
browserTimezone = ->
userDate = new Date()
zoneMatches = userDate.toString().match(/([A-Z][A-Z][A-Z])/g)
userZone = zoneMatches[zoneMatches.length - 1]
Funciona en IE8, IE9, Safari 9, Firefox 44 y Chrome 48
Este es un muy buen trabajo para mí:
// Translation to offset in Unix Timestamp
let timeZoneOffset = ((new Date().getTimezoneOffset())/60)*3600;
Este valor es de la máquina del usuario y se puede cambiar en cualquier momento, así que creo que no importa, solo quiero obtener un valor aproximado y luego convertirlo a GMT en mi servidor.
Por ejemplo, soy de Taiwán y me devuelve "+8".
JS
function timezone() {
var offset = new Date().getTimezoneOffset();
var minutes = Math.abs(offset);
var hours = Math.floor(minutes / 60);
var prefix = offset < 0 ? "+" : "-";
return prefix+hours;
}
$(''#result'').html(timezone());
HTML
<div id="result"></div>
Resultado
+8
Esto hará el trabajo.
var time = new Date(),
timestamp = Date(1000 + time.getTime());
console.log(timestamp);
Thu May 25 2017 21:35:14 GMT+0300 (IDT)
indefinido
JavaScript:
var d = new Date();
var n = d.getTimezoneOffset();
var timezone = n / -60;
console.log(timezone);
Me doy cuenta de que esta respuesta es un poco fuera de tema, pero me imagino que muchos de nosotros que buscamos una respuesta también queríamos dar formato a la zona horaria para la visualización y quizás también obtener la abreviatura de la zona. Así que aquí va ...
Si desea que la zona horaria del cliente esté bien formateada, puede confiar en el método Date.toString de JavaScript y hacer:
var split = new Date().toString().split(" ");
var timeZoneFormatted = split[split.length - 2] + " " + split[split.length - 1];
Esto le dará "GMT-0400 (EST)" por ejemplo, incluyendo los minutos de la zona horaria cuando corresponda.
Alternativamente, con regex puedes extraer cualquier parte deseada:
Para "GMT-0400 (EDT)":
new Date().toString().match(/([A-Z]+[/+-][0-9]+.*)/)[1]
Para "GMT-0400":
new Date().toString().match(/([A-Z]+[/+-][0-9]+)/)[1]
Por solo "EDT":
new Date().toString().match(//(([A-Za-z/s].*)/)/)[1]
Por solo "-0400":
new Date().toString().match(/([-/+][0-9]+)/s/)[1]
Referencia de Date.toString: https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Date/toString
Puedes usar:
momento-zona horaria
<script src="moment.js"></script>
<script src="moment-timezone-with-data.js"></script>
// retrieve timezone by name (i.e. "America/Chicago")
moment.tz.guess();
La detección de la zona horaria del navegador es bastante difícil de conseguir, ya que el navegador proporciona poca información.
Momento Date.getTimezoneOffset()
utiliza Date.getTimezoneOffset()
y Date.toString()
en unos pocos momentos del año en curso para recopilar la mayor información posible sobre el entorno del navegador. Luego compara esa información con todos los datos de zona horaria cargados y devuelve la coincidencia más cercana. En caso de empate, se devuelve la zona horaria con la ciudad con mayor población.
console.log(moment.tz.guess()); // America/Chicago
Si todo lo que necesita es la abreviatura de zona horaria "MST" o "EST":
function getTimeZone(){
var now = new Date().toString();
var timeZone = now.replace(/.*[(](.*)[)].*/,''$1'');//extracts the content between parenthesis
return timeZone;
}
Solo debes incluir moment.js y jstz.js
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.17.1/moment.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jstimezonedetect/1.0.6/jstz.min.js"></script>
y después de eso
<script>
$(function(){
var currentTimezone = jstz.determine();
var timezone = currentTimezone.name();
alert(timezone);
});
</script>
Usar un desplazamiento para calcular la Zona horaria es un enfoque equivocado, y siempre encontrará problemas. Las zonas horarias y las reglas de horario de verano pueden cambiar en varias ocasiones durante un año, y es difícil mantenerse al día con los cambios.
Para obtener una zona horaria correcta en JavaScript, debes usar
console.log(Intl.DateTimeFormat().resolvedOptions().timeZone)
Desafortunadamente, al momento de escribir esto, todavía no está ampliamente soportado.
Sé que está funcionando correctamente, al menos en Chrome.
ecma-402 / 1.0 dice que la zona timeZone
puede no estar definida si no se proporciona al constructor. Sin embargo, el borrador futuro (3.0) solucionó ese problema cambiando a la zona horaria predeterminada del sistema.
En esta versión de la API de internacionalización de ECMAScript, la propiedad
timeZone
permanecerá indefinida si no se proporcionó una propiedadtimeZone
en el objeto de opciones proporcionado al constructorIntl.DateTimeFormat
. Sin embargo, las aplicaciones no deben confiar en esto, ya que las futuras versiones pueden devolver un valor de Cadena que identifica la zona horaria actual del entorno del host.
en ecma-402 / 3.0, que todavía está en un borrador, cambió a
En esta versión de la API de internacionalización ECMAScript 2015, la propiedad
timeZone
será el nombre de la zona horaria predeterminada si no se proporcionó la propiedadtimeZone
en el objeto de opciones proporcionado al constructorIntl.DateTimeFormat
. La versión anterior dejó la propiedad de la zonatimeZone
sin definir en este caso.
Entonces, antes de usarlo, compruebe el soporte actual en los navegadores, por ejemplo en
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat/resolvedOptions
Utilice esto para convertir OffSet a postive:
var offset = new Date().getTimezoneOffset();
console.log(offset);
this.timeOffSet = offset + (-2*offset);
console.log(this.timeOffSet);
Vea que este operador resultante era opuesto a la Zona horaria. Por lo tanto, aplique alguna función matemática y luego valide el número menos o más.
var a = new Date().getTimezoneOffset();
var res = -Math.round(a/60)+'':''+-(a%60);
res = res < 0 ?res : ''+''+res;
console.log(res)
Ya se ha respondido cómo obtener el desplazamiento en minutos como un entero, pero en caso de que alguien quiera el desplazamiento GMT local como una cadena, por ejemplo, "+1130"
:
function pad(number, length){
var str = "" + number
while (str.length < length) {
str = ''0''+str
}
return str
}
var offset = new Date().getTimezoneOffset()
offset = ((offset<0? ''+'':''-'')+ // Note the reversed sign!
pad(parseInt(Math.abs(offset/60)), 2)+
pad(Math.abs(offset%60), 2))
Zona horaria en horas-
var offset = new Date().getTimezoneOffset();
if(offset<0)
console.log( "Your timezone is- GMT+" + (offset/-60));
else
console.log( "Your timezone is- GMT-" + offset/60);
Si desea ser preciso como lo mencionó en el comentario, debería intentar así:
var offset = new Date().getTimezoneOffset();
if(offset<0)
{
var extraZero = "";
if(-offset%60<10)
extraZero="0";
console.log( "Your timezone is- GMT+" + Math.ceil(offset/-60)+":"+extraZero+(-offset%60));
}
else
{
var extraZero = "";
if(offset%60<10)
extraZero="0";
console.log( "Your timezone is- GMT-" + Math.floor(offset/60)+":"+extraZero+(offset%60));
}
intente getTimezoneOffset()
del objeto Date
:
var curdate = new Date()
var offset = curdate.getTimezoneOffset()
Este método devuelve el desplazamiento de la zona horaria en minutos, que es la diferencia entre GMT y la hora local en minutos.
simplemente puedes probar esto. te devolverá el tiempo de la máquina actual
var _d = new Date(), t = 0, d = new Date(t*1000 + _d.getTime())
var offset = new Date().getTimezoneOffset();
console.log(offset);
El desplazamiento de la zona horaria es la diferencia, en minutos, entre la hora UTC y la hora local. Tenga en cuenta que esto significa que el desplazamiento es positivo si la zona horaria local está detrás de UTC y negativa si está adelante. Por ejemplo, si su zona horaria es UTC + 10 (hora estándar del este de Australia), se devolverá -600. El horario de verano evita que este valor sea una constante incluso para una configuración regional determinada
Tenga en cuenta que no todas las zonas horarias se compensan con horas enteras: por ejemplo, Terranova es UTC menos 3h 30m (dejando fuera de la ecuación el horario de verano).
function getLocalTimeZone() {
var dd = new Date();
var ddStr = dd.toString();
var ddArr = ddStr.split('' '');
var tmznSTr = ddArr[5];
tmznSTr = tmznSTr.substring(3, tmznSTr.length);
return tmznSTr;
}
Ejemplo: Jue 21 de junio de 2018 18:12:50 GMT + 0530 (hora estándar de la India)
O / P: +0530