Si mon utilisateur est en Californie et qu'ils ont leur ordinateur à PST, il est 13h00. Si mon serveur est défini sur EST, l'heure du serveur actuel est 16h00.
J'ai besoin d'un moyen d'obtenir la différence de fuseau horaire entre le client et le serveur, en JavaScript ou en C #. Dans mon exemple, j'aurais obtenu 3 (ou -3, peu importe). P>
Est-ce que quelqu'un sait faire cela? P>
EDIT: Solution possible pour RedFilter strong> p> Tout faire en JavaScript: p> pense que cela fonctionnerait? Ou serait-il de ces deux identiques à la fois? P> p>
4 Réponses :
Vous pouvez:
1 - renvoyez la date du serveur au client en tant que variable de date JavaScript. update strong> p> ici est Un exemple: p> si le serveur et le client sont sur la même machine, vous verrez un // Cela a été utile pour moi - DateTime.now.tostring ("Yyyy-mm-ddthh: mm: ss") p> p>
2 - Créez un nouveau côté de la date de la date JavaScript ( Var actuelTime = nouvelle date (); code>) et soustrayez la date ci-dessus
3 - Publier le résultat retour au serveur (si nécessaire; vous n'avez peut-être pas besoin de connaître le côté client de différence). P> DIFFMIN code> approchant zéro. Il existe une légère différence entre les dates dues au temps entre le script côté serveur générant la date et le navigateur analysant et exécutant le JavaScript. P>
J'ai édité mon original, laissez-moi savoir si vous pensez que cela fonctionnerait.
Un bon moyen de vérifier la différence TimeZone, est de connaître le fuseau horaire (emplacement) où le temps est pris. Si vous pouvez obtenir cela sur le côté client et le côté serveur, vous pouvez vérifier la classe TimeZoneInfo (Besoins 3.5 Je pense) TimeZoneInfo de Koders . P>
Convertissez la durée du client et du serveur avec la zone associée à UTC (ConvertTyzonetoutC) et comparez les deux. P>
C'est le problème, je ne connais pas le fuseau horaire que le client naviguera d'une part, cela pourrait être de n'importe où. Si je pouvais obtenir cette information en quelque sorte, ce serait utile, mais je ne sais pas comment.
Ensuite, j'aimerais savoir comment vous obtenez le temps du client. Parce que j'ai un problème similaire et je l'ai résolu en utilisant l'emplacement de tous les contacts. J'utilise la localisation des villes associée à un fuseau horaire.
Avez-vous besoin de connaître le fuseau horaire de l'emplacement ou de la machine? p>
Si vous avez besoin de connaître le fuseau horaire de l'emplacement, votre meilleur pari est de vous abonner à un service Geo-IP et de vérifier l'adresse IP, puis de vérifier sur le fuseau horaire de cet emplacement (il existe des bases de données disponibles pour cela). Il n'est pas garanti que l'information géographique de la propriété intellectuelle n'est pas garantie (et ce n'est certainement pas seulement un manque théorique de garantie, des informations erronées abondent). P>
Souvent, ce que vous voulez vraiment, c'est le réglage de fuseau horaire de la machine client. Pour la plupart des services, je le trouverais ennuyeux si je voyagais et que je disposais d'un site Web, pensez que de moi d'être dans une période différente de cela, je travaillais dans (je m'en tiens à mon fuseau horaire si je ne suis pas hors de celui-ci). p>
Ceci est facilement fait le côté du client. Vous pouvez facilement mettre cela dans une URI utilisée par une demande d'image ou de xhr, ou de la mettre dans une valeur de cookie. P> Nouvelle date (). GetTimezoneOffset () code> renvoie le nombre de minutes entre UTC et heure locale. Par exemple. Actuellement, je suis en temps d'été irlandais (GMT + 1Hotre heure d'été), et elle renvoie -60. P>
Ce problème m'a fait plaisir: J'ai un problème similaire, mais je le fais du côté serveur et d'exécuter un nœud.js aws lambda. Je ne peux pas accepter que j'ai besoin de transmettre le temps du client au serveur (ou visa-versa devrait que ce soit votre cas). Je connais le fuseau horaire, JavaScript connaît les règles de la convertir, pourquoi devrais-je avoir besoin de la transmettre en arrière? Ce que je faisais juste calcule la différence entre les deux fuseaux fusionnées pour n'importe quelle date. Ci-dessous, il est mis en place pour convertir entre UTC et Timezones aux États-Unis, qui n'a jamais eu d'heures partielles, donc je l'ai défini pour arrondi à un entier d'heures, mais vous devrez le réorganiser si vous travaillez jamais Avec des fuseaux trimzones bien comme l'Inde, etc. Vous devez faire du reste, car il y a des restes de millisecondes supplémentaires (ce que je soupçonne avec le taux de décomposition du césium et non une erreur d'arrondi - pas sûr de ne pas m'en soucier).
Note que cela fonctionne le côté serveur (mais l'inverse fonctionnera évidemment) et que mon serveur exécute UTC. Notez également que lorsque vous initialisez la variable de première date, vous devez définir la date à la date à laquelle vous souhaitez le décalage car ils peuvent changer quotidiennement. P>
var UTCTime = new Date();
var pacificTime = new Date(UTCTime.toLocaleString("en-US",{timeZone: "America/Los_Angeles"}));
var offset = Math.round((UTCTime-pacificTime)/1000/60/60,0);
console.log(offset); // returns 7 (during daylight saving time)
Si le serveur est défini sur Est, quelque chose ne va pas. Il devrait fonctionner dans UTC. Cela éliminera tant de maux de tête liés aux fuseaux horaires.
@Frederik je ne vois pas comment cela change vraiment des choses. Si l'application doit connaître le décalage de temps du client, il doit connaître indépendamment du réglage de la fusevage du serveur.
Mon serveur est en cours d'exécution dans UTC, je viens d'utiliser l'Est comme exemple pour éviter tout «il existe des fonctions pour convertir les dates en utc. réponses, ce qui ne vous aiderait pas au problème que j'ai.
Je préconiserais stocker des données (lors de la structure de données ou de la base de données) en tant que fois UTC, mais la définition du serveur entier en UTC est un peu beaucoup.
N'oubliez pas non plus que 1) Il y a des trimestres avec une demi-heure UTC offsets 2) la différence de temps entre deux fuseaux tarieurs change tout au long de l'année.
@Steven (et @pointy): Cela fait une différence. Toutes les fuseaux de temps ont une compensation liée à l'UTC, non l'un à l'autre. La classe code> TimeZoneInfo code> a une propriété
baseutcoffset code>. En comparant ceci pour deux instances différentesTimeZoneInfo CODE>, vous pouvez calculer la différence entre les zones horaires. De plus, la structure code> DateTime DateTime contient des procédés de conversion entre le temps local etuc code> mais pas vers d'autres fuseaux horaires aléatoires. Je voudrais donc dire que tout le temps sur le serveur est UTC simplifiera considérablement les choses. Cela dit, le contexte du code @stevens pourrait naturellement être complètement différent.@Fredrik: Je pensais que Windows utilisait UTC en interne et définir le fuseau horaire affecté uniquement à la manière dont les temps ont été affichés ou si une application demandait l'heure dans un fuseau horaire local, tout se passe toujours dans l'UTC dans les coulisses.
@Fredrik: Le seul problème avec c'est que je ne sais pas comment obtenir le fuseau horaire du client. Si je pouvais le faire, je pourrais comparer la baseutcoffset de ce fuseau horaire avec le fuseau horaire du serveur. Savez-vous comment obtenir le fuseau horaire du client?
@Steven: des indices de contexte dans votre mise à jour, j'ai eu le sentiment que votre question est liée à ASP.NET, donc j'ai ajouté cette balise. N'hésitez pas à rouler. J'ai aussi supprimé ma réponse sur les mêmes motifs.
@Steven: Vous pouvez obtenir des indications ici: Stackoverflow.com/Questtions/338482/...
@Fredrik, exécutant un serveur dans une autre chose que l'UTC est un bon moyen d'attraper un code Web WebServer à l'aide de plusieurs heures locales. Esp. Si vous vivez quelque part où UTC et Localtime coïncident pour une partie de l'année.