يوم جيد ، عشاق باورشيل.
أحبه ، واليوم لاحظت غرابة واحدة دفعتني إلى كتابة هذا المقال. أعتقد أنك سوف تكون مهتمة جدا. حالة القراد الزائدة. إذا كنت مهتمًا ، مرحبًا بك في Cat:
ما هو جوهر الغرابة؟
في معالجة واحدة ، من أجل راحة الاختيار ، كان هناك حاجة إلى عدد الأيام حتى نهاية الشهر.
تم حساب هذا في سطر واحد من هذا النوع:
((Get-date -Day 1).AddMonths(1)-(get-date)).days-1
ما هو مميز هو حسابه يمكن أن تعطي نتائج مختلفة:

في البداية ، اعتقدت أن هناك خطأ ما في الشفرة ، أو في إصدار Powershell.
راجعت على العديد من السيارات وأدركت أن الوضع قابل للتكرار.
لذلك ، جلست لاول مرة وكتابة وظيفة.
حصلت على هذا ، التعليقات تذهب على الفور إلى الكود:
Function Get-DaysToEndOfMonths([int]$Month=1) {If($Month -lt 1){[int]$Month = 1} $CurrentDate = get-date
حسنًا ، بعد أن كتبت ، جلست للتفكير وتوصلت إلى هذا السطر:
[int]((((Get-Date -day 01).AddMonths(1)).AddDays(-1)).Day-(Get-date).Day)
لم تخطئ ، لكن ربما ، لأنه:
اتضح أننا لا نأخذ في الاعتبار ساعة \ دقيقة \ ثانية ، أو بالأحرى علامات ساعة المعالج.
لاحظ أن Get-date تقوم بإرجاع قيمة بالمللي ثانية.
ولكن إذا ، عند إجراء العمليات الحسابية ، سقطت استدعاء Get-date الأولى والثانية على علامة واحدة ، فستكون هناك مثل هذه القيم:
(Get-date -day 1).AddMonth(1) = 1.12.2019 15:33:00:500 Get-date = 1.11.2019 15:33:00:500
اطرح واحصل على 30: 00: 00: 000
ولكن إذا كانت الدعوة إلى Get-date الثاني تقع في علامة التجزئة التالية ، فستكون قيمتها
=>
1.11.2019 15:33:00:501
ثم نحصل على القيمة في
29 23:59:59:999
الآن بعد العثور على المشكلة ، يمكننا القيام بذلك:
وسيكون لدينا دائما نفس المعنى.
كن حذرا ويكون عطلة نهاية أسبوع جيدة!