J'utilise Laravel 5.7 pour API et VUE pour l'avant. Dans la réponse de l'API, je reçois le dernier horodatage d'un utilisateur comme code API de Laravel : strong> p> sur l'extrémité avant, c'est-à-dire en Vue j'utilise Paquet Dayjs pour afficher la dernière fois que l'utilisateur vu comme Depuis que je suis dans Asie / Kolkata em> Timezone, le code prend 5,5 / 6 heures également en considération. J'ai aussi essayé avec C'est ce que j'ai essayé jusqu'à présent: strong> p> Je passe la chaîne DateTime à ma fonction de Vuejs: p> puis appelez ceci Méthode d'imprimer comme last_seen: "2019-04-17 05:20:37" code> qui est par défaut au format UTC.
[jour | heures | minutes de l'utilisateur] il y a code> mais le problème est Utilisateur prévu est connecté juste maintenant strong> mais je Je reçois, c'est montrer
6 heures il y a 6 heures code> p>
Moment.js code> mais je reçois
Moment de fonction non défini.tz.guess () code> Erreur p>
il y a 1 minute code>. p>
<div class="side-box mt-4">
<h2 class="side-head">
<i class="fa fa-clock-o" />
{{ convertFromNow(userInfo.user_details.last_seen) }}
<h6 class="text-gray">
Last seen
</h6>
</h2>
</div>
4 Réponses :
Ma compréhension de votre question est que vous devez obtenir le fuseau horaire de l'utilisateur (à travers leur navigateur). Je démontrerai cela à l'aide de CDN du moment.
Vous devez avoir à la fois instant.js code> et
moment-tempone-with-data.js code>: p>
Carbon::parse($time)->setTimezone($tz);
Vous essayez également d'utiliser p> instant.js code>, vous devez indiquer code> le moment code> est dans uc
<script src="https://momentjs.com/downloads/moment.js"></script>
Cette réponse fonctionne autour du problème. Vous devriez viser à le réparer à la source
@Phil Oui, cela a fonctionné et j'ai mis en œuvre cela selon le VUE. Moment d'importation de "moment"; code>
ConvertfromNow (date) { code>
retour de retour.utc (date) .Fromnow (); code> `},`
Voici ma solution à Vanilla JavaScript (sans dépendre des bibliothèques externes telles que moments.js ou jours.js).
L'astuce consiste à ajouter 'UTC' à votre chaîne de date, avant de la convertir en javascript date objet. P>
p>
const dateString = '2019-04-17 05:20:37'; const localDate = new Date(`${dateString} UTC`); console.log(localDate)
"Si vous exécutez le code ci-dessus sur votre console de navigateur local (Chrome), il doit imprimer l'heure en fonction de votre fuseau horaire local (ou de votre utilisateur)." I> - et Firefox imprimera null code>
Merci @wentjun Votre solution m'a aidé :) Mais laissez-moi tester aussi d'autres navigateurs.
@Andreas pourriez-vous s'il vous plaît laissez-moi savoir votre version Firefox? Je crois que cela ne s'applique qu'aux navigateurs de Firefox 'plus âgés'
@DineshsThark Je dois ajouter une responsabilité de non-responsabilité, cette méthode peut ne pas fonctionner sur les plus anciens de navigateurs.
Votre chaîne de date / heure "2019-04-17 05:20:37" EM> peut représenter une heure UTC mais JavaScript l'analysera comme une heure locale, ce qui signifie que les temps seront La réponse très simple consiste à utiliser un format sans ambiguïté, comme ISO 8601 / ATOM, par exemple P> $user_details = [
// snip
'account_creation_date' => $userDetails->created_at->toAtomString(),
'last_seen' => $lastSeen != null ? $lastSeen->toAtomString() : $userDetails->last_login->toAtomString(),
// snip
];
Merci @Phil pour avoir souligné cette amélioration. En fait, je ne savais pas à propos de ce toatomstring () code> méthode de carbone.
Quel est le problème dans l'utilisation d'un moment.js? C'est une grande bibliothèque.
@iwaDuarte Il n'y a pas de problème à utiliser
instant.js code> mais j'arrête à deviner le fuseau horaire de l'utilisateur.
Reportez-vous également à ce lien pour comprendre ce qui se passe avec votre code. Github.com/moment/moment-timeZone/issues/523 . Pourriez-vous également modifier votre question pour inclure le code que vous utilisez avec moment.js?
Pourquoi votre API renvoie-t-elle la date / heure de la date / l'heure sans informations de fuseau horaire? IMHO, le meilleur format de transport pour les dates est ISO 8601, c'est-à-dire
2019-04-17T05: 20: 37Z code>. Cela le rend sans ambiguïté et JS peut l'analyser correctement. Dans mon navigateur, l'analyse de votre
"2019-04-17 05:20:37" CODE> String le traite comme une heure locale (ce qui semble être votre problème)
Vous pouvez obtenir l'heure actuelle de l'utilisateur à l'aide de
tolocalestring () code>
De Documentation Dayjs : "Si vous souhaitez analyser ou afficher en UTC, vous pouvez utiliser
.utc code>
.Local code>
.iSutc code> avec plugin uc" i>
La vraie question concerne comment votre horodatage stocké et quel code PHP utilisez-vous pour les définir dans la réponse de l'API? Réparer cela pour utiliser le format ISO 8601 et tous vos problèmes vont probablement disparaître
@Phil Par défaut, Laravel stocke des horodatages dans le format UTC.
1) Cela ne répond pas à ma question du tout, et 2)
2019-04-17 05:20:37 code> est pas b> A. Comment allez-vous la réponse de l'API? Qu'est-ce que exactement b> est le format de données stocké? Si c'est dans un DB, quel type de données est la colonne?
@Phil j'ai ajouté le code API LARAVEL et a mis à jour le code.