Προσδιορίστε πεδίου του Χρήστη

ψήφοι
539

Υπάρχει κάποιος τυπικός τρόπος για έναν Web server για να είναι σε θέση να προσδιορίσει τη ζώνη ώρας του χρήστη σε μια ιστοσελίδα εκεί;

Ίσως από μια κεφαλίδα ΗΤΤΡ ή μέρος της συμβολοσειράς χρήστη-πράκτορα;

Δημοσιεύθηκε 01/08/2008 στις 00:42
πηγή χρήστη
Σε άλλες γλώσσες...                            


25 απαντήσεις

ψήφοι
77

Δεν υπάρχουν κεφαλίδες HTTP που θα αναφέρει τον πελάτη ζώνη ώρας μέχρι στιγμής, αν και έχει προταθεί να συμπεριληφθεί στην προδιαγραφή HTTP.

Αν ήμουν εγώ, εγώ θα μπορούσε πιθανότατα να προσπαθήσει να φέρει τη ζώνη ώρας χρησιμοποιώντας clientside JavaScript και στη συνέχεια την υποβάλλει στο διακομιστή χρησιμοποιώντας Ajax ή κάτι τέτοιο.

Απαντήθηκε 01/08/2008 στις 13:19
πηγή χρήστη

ψήφοι
47

Η Javascript είναι ο ευκολότερος τρόπος για να πάρετε την τοπική ώρα του πελάτη. Θα ήθελα να προτείνω τη χρήση ενός XMLHttpRequestνα στείλει πίσω την τοπική ώρα, και αν αυτό αποτύχει, πέφτουν πίσω στη ζώνη ώρας ανιχνεύεται με βάση τη διεύθυνση IP τους.

Σε ό, geolocation, έχω χρησιμοποιήσει MaxMind GeoIP σε διάφορα σχέδια και δουλεύει καλά, αν και δεν είμαι σίγουρος αν παρέχουν δεδομένα ζώνης ώρας. Είναι μια υπηρεσία που πληρώνετε για και παρέχουν μηνιαίες ενημερώσεις στη βάση δεδομένων σας. Παρέχουν περιτυλίγματα σε διάφορες γλώσσες web.

Απαντήθηκε 01/08/2008 στις 16:11
πηγή χρήστη

ψήφοι
174

Η πιο δημοφιλής (== πρότυπο;) τον τρόπο προσδιορισμού της ζώνης ώρας που έχω δει γύρω απλώς ζητώντας από τους ίδιους τους χρήστες. Εάν η ιστοσελίδα σας απαιτεί συνδρομή, αυτό θα μπορούσε να σωθεί με τα δεδομένα του προφίλ των χρηστών. Για τους χρήστες Anon, οι ημερομηνίες θα μπορούσε να εμφανίζεται ως UTC ή GMT ή κάποια τέτοια.

Δεν προσπαθώ να είναι μια έξυπνη aleck. Είναι απλά ότι μερικές φορές ορισμένα προβλήματα έχουν λεπτότερα λύσεις έξω από κάθε πλαίσιο προγραμματισμού.

Απαντήθηκε 03/08/2008 στις 20:30
πηγή χρήστη

ψήφοι
14

Η μαγεία όλων φαίνεται να είναι σε

visitortime.getTimezoneOffset()

Αυτό είναι δροσερό, δεν ήξερα γι 'αυτό. Έχει εργαστεί στον IE, κλπ; Από εκεί θα πρέπει να είναι σε θέση να χρησιμοποιούν JS με AJAX, που τα cookies, οτιδήποτε. Είχα πάει πιθανώς την διαδρομή μπισκότο τον εαυτό μου.

Θα πρέπει να επιτρέπει στο χρήστη να το αλλάξετε όμως. Προσπαθήσαμε να χρησιμοποιήσετε geolocation (μέσω MaxMind) για να το κάνετε αυτό πριν από λίγο καιρό, και λάθος ήταν αρκετά συχνά - αρκετά για να κάνουν ότι δεν αξίζει να κάνει, γι 'αυτό ακριβώς επιτρέπουν στο χρήστη να ρυθμίσετε το προφίλ τους, και δείχνουν μια προειδοποίηση προς τους χρήστες που δεν έχουν το δικό τους που ακόμη.

Απαντήθηκε 03/08/2008 στις 21:40
πηγή χρήστη

ψήφοι
16

Όποιος γνωρίζει από τις υπηρεσίες που θα ταιριάζει IP για τη γεωγραφική θέση

Λοιπόν, τυχεροί για σας ότι η απάντηση μπορεί να βρεθεί σε πολύ δική του ιστοσελίδα Stackoverflow μας: Πώς να πάρει την χώρα, σύμφωνα με μια συγκεκριμένη IP;

αεροτομή: http://www.hostip.info/use.html

Απαντήθηκε 04/08/2008 στις 12:11
πηγή χρήστη

ψήφοι
11

Αν τυχαίνει να χρησιμοποιούν το OpenID για τον έλεγχο ταυτότητας, απλή επέκταση Εγγραφή θα λύσει το πρόβλημα για τους πιστοποιημένους χρήστες (Θα χρειαστεί να μετατρέψετε από tz στο αριθμητικό).

Μια άλλη επιλογή θα ήταν να συμπεράνουμε τη ζώνη ώρας από την προτίμηση της χώρας του πράκτορα χρήστη. Αυτή είναι μια κάπως αργό τρόπο (δεν θα λειτουργήσει για en-US), αλλά κάνει μια καλή προσέγγιση.

Απαντήθηκε 30/08/2008 στις 10:29
πηγή χρήστη

ψήφοι
302
-new Date().getTimezoneOffset()/60;

Η μέθοδος getTimezoneOffset()θα αφαιρέσει το χρόνο σας από το GMT και να επιστρέψει τον αριθμό των λεπτών. Έτσι, αν ζείτε σε GMT-8, θα επιστρέψει 480.

Για να το θέσουμε σε ώρες, διαιρέστε με 60. Επίσης, παρατηρήστε ότι το σημείο είναι το αντίθετο από ό, τι χρειάζεστε - είναι υπολογισμό GMT για μετατόπιση από τη ζώνη ώρας σας, δεν σας ζώνη ώρας είναι αντισταθμίζεται από GMT. Για να το διορθώσετε αυτό, απλά πολλαπλασιάστε με -1.

Επίσης, σημειώστε ότι w3school λέει:

Η επιστρεφόμενη τιμή δεν είναι σταθερή, λόγω της πρακτικής της χρήσης θερινή ώρα.

Απαντήθηκε 27/11/2009 στις 18:52
πηγή χρήστη

ψήφοι
10

Εδώ είναι ένα άρθρο (με τον πηγαίο κώδικα) που εξηγεί πώς να καθορίσει και να χρησιμοποιήσετε τοπική ώρα σε ένα (VB.NET, C #) εφαρμογή ASP.NET:

Καιρός ήταν

Με λίγα λόγια, η προσέγγιση που περιγράφεται βασίζεται στην Javascript για getTimezoneOffsetλειτουργία, η οποία επιστρέφει την τιμή που έχει αποθηκευτεί στο cookie περιόδου και να χρησιμοποιηθούν από τον κωδικό-πίσω για να ρυθμίσετε τις τιμές διάστημα μεταξύ GMT και της τοπικής ώρας. Το ωραίο είναι ότι ο χρήστης δεν χρειάζεται να ορίσετε τη ζώνη ώρας (ο κώδικας κάνει αυτόματα). Δεν υπάρχει μεγαλύτερη συμμετοχή (αυτός είναι ο λόγος που συνδέουν το άρθρο), αλλά υπό τον όρο κώδικα καθιστά πραγματικά εύκολο στη χρήση. Υποψιάζομαι ότι μπορείτε να μετατρέψετε τη λογική σε PHP και άλλες γλώσσες (εφ 'όσον έχετε κατανοήσει ASP.NET).

Απαντήθηκε 25/05/2010 στις 01:11
πηγή χρήστη

ψήφοι
16

Με ημερομηνία PHP λειτουργία θα πάρετε την ώρα ημερομηνία διακομιστή στον οποίο βρίσκεται το site. Ο μόνος τρόπος για να πάρετε το χρόνο χρήστης να χρησιμοποιήσει το JavaScript.

Αλλά εγώ σας προτείνω να, αν το site σας έχουν ζητήσει την καταχώριση τότε καλύτερος τρόπος είναι να ρωτήσετε τον χρήστη, ενώ η καταχώριση ως υποχρεωτικό πεδίο. Μπορείτε να απαριθμήσει διάφορες ζώνες ώρας στην σελίδα μητρώο και να σώσει ότι στη βάση δεδομένων. Μετά από αυτό, αν την είσοδο του χρήστη στο site, στη συνέχεια, μπορείτε να ορίσετε την προεπιλεγμένη ζώνη ώρας για τη σύνοδο αυτή, σύμφωνα με επιλεγμένη ζώνη ώρας των χρηστών. Μπορείτε να ορίσετε οποιαδήποτε συγκεκριμένη ζώνη ώρας χρησιμοποιώντας τη λειτουργία PHP date_default_timezone_set. Αυτό που την καθορισμένη ζώνη ώρας για τους χρήστες.

Βασικά ζώνη ώρας των χρηστών είναι πηγαίνει στην πλευρά του πελάτη, γι 'αυτό πρέπει να χρησιμοποιήσετε τη Javascript για αυτό.

Παρακάτω είναι το σενάριο να πάρει τη ζώνη ώρας των χρηστών χρησιμοποιώντας PHP και JavaScript.

<?php
#http://www.php.net/manual/en/timezones.php List of Time Zones
function showclienttime()
{
  if(!isset($_COOKIE['GMT_bias']))
  {
    ?>
    <script type="text/javascript">
    var Cookies = {};
    Cookies.create = function (name, value, days) {
      if (days) {
        var date = new Date();
        date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
        var expires = "; expires=" + date.toGMTString();
      } else {
        var expires = "";
      }
      document.cookie = name + "=" + value + expires + "; path=/";
      this[name] = value;
    }

    var now = new Date();
    Cookies.create("GMT_bias",now.getTimezoneOffset(),1);
    window.location = "<?php echo $_SERVER['PHP_SELF'];?>";
    </script>
    <?php
  } else {
    $fct_clientbias = $_COOKIE['GMT_bias'];
  }

  $fct_servertimedata = gettimeofday();
  $fct_servertime = $fct_servertimedata['sec'];
  $fct_serverbias = $fct_servertimedata['minuteswest'];
  $fct_totalbias = $fct_serverbias – $fct_clientbias;
  $fct_totalbias = $fct_totalbias * 60;
  $fct_clienttimestamp = $fct_servertime + $fct_totalbias;
  $fct_time = time();
  $fct_year = strftime("%Y", $fct_clienttimestamp);
  $fct_month = strftime("%B", $fct_clienttimestamp);
  $fct_day = strftime("%d", $fct_clienttimestamp);
  $fct_hour = strftime("%I", $fct_clienttimestamp);
  $fct_minute = strftime("%M", $fct_clienttimestamp);
  $fct_second = strftime("%S", $fct_clienttimestamp);
  $fct_am_pm = strftime("%p", $fct_clienttimestamp);
  echo $fct_day.", ".$fct_month." ".$fct_year." ( ".$fct_hour.":".$fct_minute.":".$fct_second." ".$fct_am_pm." )";
}

showclienttime();
?>

Όμως, σύμφωνα με τη δική μου άποψη, είναι καλύτερα να ρωτήσετε τους χρήστες, αν η εγγραφή είναι υποχρεωτική στο έργο σας.

Απαντήθηκε 16/09/2010 στις 06:59
πηγή χρήστη

ψήφοι
34

Εδώ είναι ένα πιο ολοκληρωμένο τρόπο.

  1. Πάρτε την ζώνη ώρας μετατόπιση για το χρήστη
  2. Δοκιμάστε μερικές ημέρες για DLS όρια για να καθοριστεί αν είναι σε μια ζώνη που χρησιμοποιεί DLS.

Εκτός από κάτω:

function TimezoneDetect(){
    var dtDate = new Date('1/1/' + (new Date()).getUTCFullYear());
    var intOffset = 10000; //set initial offset high so it is adjusted on the first attempt
    var intMonth;
    var intHoursUtc;
    var intHours;
    var intDaysMultiplyBy;

    //go through each month to find the lowest offset to account for DST
    for (intMonth=0;intMonth < 12;intMonth++){
        //go to the next month
        dtDate.setUTCMonth(dtDate.getUTCMonth() + 1);

        //To ignore daylight saving time look for the lowest offset.
        //Since, during DST, the clock moves forward, it'll be a bigger number.
        if (intOffset > (dtDate.getTimezoneOffset() * (-1))){
            intOffset = (dtDate.getTimezoneOffset() * (-1));
        }
    }

    return intOffset;
}

Να πάρει TZ και DST από JS (μέσω Way Back Machine)

Απαντήθηκε 30/03/2011 στις 21:48
πηγή χρήστη