10
votes

Obtenez le numéro de la semaine à partir d'une date donnée

Exemples: xxx

format ("1/2/2009", "ww") retourne 6

Alors, comment puis-je obtenir le résultat correct?


1 commentaires

Cela comptait simplement dimanche le premier jour de la semaine et non lundi.


7 Réponses :


5
votes

Cela pourrait fonctionner: format (Yourdate, "ww", vbmonday)


4 commentaires

@Sosh: Je suis curieux de voir ce que l'OP attend le 01/05/09 (5 janvier 09)? Je pense que SOP pourrait s'attendre à ce que le 5 janvier soit la semaine 1, alors que ce sera la semaine 2 selon votre exemple.


Il existe également un argument de premier plan pour la fonction de format: VBUXystem, VBFirstJAN1, VBFirstFourDays, VBFirstfullweek


@shahkalpeh, je m'attends à 2 et je reçois 2 .


@Nick: Sosh a raison dans ce cas. La semaine commence de lundi selon votre exemple.



2
votes

"résultat correct" dépend de la locale. Peut-être que VBA vous permettra de choisir un système de calendrier, sinon vous avez à peu près de la chance.

Notez que le premier jour-xxday n'est pas votre seul problème. Il y a aussi une variation sur quelle semaine une semaine complète est si la semaine 1 dans un système pourrait être semaine 53 de l'année précédente dans un autre système.

Alors testez soigneusement et ne soyez pas séduit pour "corriger par 1".


1 commentaires

Merci. À propos de votre note: le numéro de la semaine, pour moi, n'est pas critique. Seulement Accompagny Un champ de date.



1
votes

Il y a toute une norme pour les numéros de semaine: ISO-8601

http://fr.wikipedia.org/wiki/iso_8601#week_dates


1 commentaires

Oui, mais tous les clients (pays) n'utilisent pas cela.



0
votes

Si dimanche est le premier jour de la semaine (comme dans certains locaux), 6 est le bon de semaine du "1/2/2009" (le 1er février 2009)


0 commentaires

27
votes

Cela fait deux choses ici qui ne correspondent pas à vos attentes, je pense: En supposant que vous souhaitiez la semaine avec 1 janvier en une semaine 1, et utilisez le dimanche comme premier jour de la semaine Donc, il a une semaine 1 à partir du dimanche 28 décembre 2008 au samedi 3 janv. 2009.

La semaine 6 commencerait le dimanche 1er février par cette méthode.

La norme ISO est pour la semaine 1 pour être celui contenant 4 jours de janvier, ou le premier jeudi de l'année (différentes manières d'exprimer la même chose). Vous pouvez spécifier cette méthode de calcul et le premier jour de la semaine: xxx

voir ici pour la syntaxe:

https://support.office.com/en-us/article/Format -Function-6f29D87B-8761-408D-81D3-63B9CD842530


4 commentaires

+1, c'est la réponse complète. J'espère que cela ne vous dérange pas de la modification cosmétique.


Pas du tout, et je me suis maintenant arrondi pour mettre à jour mes informations de profil, donc j'ai un nom propre (je viens de sauter de SuperUser.com et je suis inscrit pour répondre à celui-ci)


Adamv, vous avez clarifié la question . Merci.


VBMonday et VBFirstFourDays Tous les deux = 2 Si vous interrogez l'accès d'une autre source.



5
votes

Quel que soit le jour de la semaine, votre semaine commence, vous devez passer des valeurs de date sans ambiguïté. "31/1/2009" ne peut être qu'une seule date (31 janvier), mais "1/2/2009" pourrait être le 2 janvier (style américain) ou le 1er février (tout le monde qui a plus de sens que nous nous utilisons).

Dans ce cas, j'utiliserais datestérien () pour vous assurer que la date n'est pas mal interprétée: xxx

S'il ne s'agit pas de votre problème, car l'accès utilise utilement votre problème. Les paramètres de date localisés de votre système, je pense que c'est quelque chose que vous devriez faire de toute façon. Vous êtes certainement obligé de le faire dans SQL dans l'accès, je ne pense donc pas que ce soit une mauvaise habitude dans le code et les expressions.


0 commentaires

1
votes

J'ai eu le même problème.

Il a montré une semaine 53 et 1 semaine 1, mais les jours de la semaine 53 et 1 semaine sont tous dans la semaine 1

J'ai d'abord essayé de modifier le format de date dans l'accès Requête à ceci:

CommandeWeek: Format ([Ordinateur de commande], "AAAA-WW", 1,3) <- Mais cela n'a pas fait le tour. Vous obtenez des dates comme 2014-52 pour la semaine 52 et 2015-52 où il fut la semaine 1 avant.

Le tri ne faisait pas comment j'ai aimé. Il a triché les données comme 2014-1, 2014-11, 2014-2, etc. Je souhaite qu'il se présente comme 2014-01, 2014-02 .. 2014-11, etc.

Voici le nouveau Code pour afficher à la fois l'année et la semaine correctement dans une requête d'accès: xxx

Cela montre maintenant tous les jours de la semaine 53 comme faisant partie de la semaine 1


0 commentaires