La differenza tra le date di utilizzo di PowerShell

Sto imparando Windows PowerShell, e sto cercando di ottenere i mesi di differenza dato due date:

For example: end: 2014-06-01
now: 2014-01-10
answer: 6 months

$now = get-date
    $date = $end -as [DateTime];
    if (!$date)
    {
      'You entered an invalid date'
    }
    else
    {
      $nts = ($now - $end).Months
      write-output $nts
    }

Ho provato di tutto, e non riesco a correggere mesi in PowerShell. Come posso risolvere il problema?

InformationsquelleAutor NULL | 2014-01-10

3 Replies
  1. 9

    Qualcosa di simile a questo?

    $begin = [datetime]'02/10/2011'
    $end   = [datetime]'01/10/2013'
    
    $monthdiff = $end.month - $begin.month + (($end.Year - $begin.year) * 12)
    $monthdiff
    
    23
    Incredibile!! grazie questo ha funzionato come un fascino!!

    InformationsquelleAutor mjolinor

  2. 19

    Dove è il $endFromDatabase variabile? Quella parte non è chiaro nel tuo post.

    Per dimostrare sottraendo DateTime oggetti, vedi l’esempio sotto.

    $TimeSpan = [DateTime]'2014-01-10' - [DateTime]'2014-01-06';

    Riceverai una System.TimeSpan come risultato dall’operazione, in modo da poter esplorare membri come:

    $TimeSpan.TotalDays;

    La mia ipotesi è che hai solo bisogno di fissare il valore della $endFromDatabase variabile, in modo che può essere gettato in un System.DateTime oggetto.

    Sfondo

    Sottraendo un [DateTime] oggetto da un altro [DateTime] oggetto funziona, perché il [DateTime] classe overload dell’operatore di sottrazione, che si traduce in op_subtraction Intermediate Language (IL) metodo. È possibile esaminare questo in un .NET oggetto explorer strumento, ad esempio .NET Reflector.

    Ti avviso che c’è un secondo overload dell’operatore di sottrazione, che consente di sottrarre un [TimeSpan] oggetto da un [DateTime] oggetto.

    La differenza tra le date di utilizzo di PowerShell

    Ritornando appena un [periodo di tempo] davvero non rispondere alla domanda, perché non si traduce in un mese di differenza, senza una data di calendario di riferimento. Su aprile 1, -30 giorni è di 2 mesi fa. Il 1 Maggio è il mese scorso.
    Buon punto, Rob. Grazie per aver ricordato la svista.

    InformationsquelleAutor Trevor Sullivan

  3. 0

    Questo è il più vicino come posso ottenere il codice originale. Sottraendo datetime risultati in un arco di tempo, che ha un giorni membro, ma non un membro mesi. ($date - $now).gettype()

    $end = '2014-06-01'
    $now = get-date
    $date = $end -as [DateTime];
    if (!$date) 
    {
      'You entered an invalid date'
    }
    else 
    {
      $nts = ($date - $now).days/30
      write-output $nts
    }

    InformationsquelleAutor js2010

Lascia un commento