• 24-09-2023, 13:20:49
    #1
    Aşağıdaki kod ile başlangıç ve bitiş tarihi belirterek o güne ait fiyat bilgisini çekiyorum.
    Başlangıç ve Bitiş tarihini aynı gün belirtiyorum. Ancak şöyle bir durum var.
    Cumartesi, Pazar ve resmi tatil günlerinde fiyat bilgisi verilmiyor.
    Bu günleri nasıl atlayabilirim ?

    Ayrıca today olarak bugünü belirledim. Bu şekilde de fiyat bilgisine ulaşabiliyorum.
    Ancak bugün tatil ise bir gün öncesini belirtmem gerekiyor.
    Bilen varsa yardımcı olur ise çok mutlu olurum.
    Şimdiden teşekkürler.


    function ReadSimulationPrices()
    {
      const SimulationBasTarih = "31.08.2023"
      const SimulationBitTarih = "31.08.2023"
      const today = Utilities.formatDate(new Date(), "GMT+3", "dd.MM.yyyy")
      const url = "https://www.xxx.com/api/DB/veri";
      const options =
      {
        "method": "post",
        "payload":
        {
          "fontip": "YAT",
          "bastarih": SimulationBasTarih,
          "bittarih": SimulationBitTarih
        }
      };
      const response = UrlFetchApp.fetch(url, options);
      const data = JSON.parse(response.getContentText()).data
      const result = data.map(fon => { return [fon.KOD, fon.FIYAT] })
      return result
    }
  • 24-09-2023, 13:31:30
    #2
    Haftanın hangi günü olduğuna bak,
    Cumartesi ise 1 pazar ise 2 gün eksilt
  • 24-09-2023, 13:35:16
    #3
    Üyeliği durduruldu
    tam çözüm değil ama yardımcı olabilir.

    bu sayfadan yardım alabilirsin Date fonksiyonu için.
    https://www.w3schools.com/js/js_date_methods.asp

    // ozel ve resmi tatil günleri
    const tatilGünleri = ["2023-12-31", "2024-01-01"];
    
    // başlangıç ve bitis tarihleri
    const başlangıçTarihi = new Date("2023-09-24");
    const bitişTarihi = new Date("2023-09-28"); // 5 gün sonrası
    
    for (let tarih = başlangıçTarihi; tarih <= bitişTarihi; tarih.setDate(tarih.getDate() + 1)) {
      // eger tarih cumartesi, pazar veya tatil günlerinden biri ise atla.
    // 0-6 arasında günler.
    // 0 pazar gününü temsil eder.
      if (tarih.getDay() === 0 || tarih.getDay() === 6 || tatilGünleri.includes(formatDate(tarih))) {
        continue;
      }
    
      // businnes logic eklenebilir
      // bilgisi vs.
    
      console.log(`Tarih: ${formatDate(tarih)} - Fiyat: `);
    }
    
    // tarih formaini Y-M-D güncellemek icin
    function formatDate(date) {
      const year = date.getFullYear();
      const month = String(date.getMonth() + 1).padStart(2, "0");
      const day = String(date.getDate()).padStart(2, "0");
      return `${year}-${month}-${day}`;
    }
  • 24-09-2023, 14:32:21
    #4
    Teşekkür ederim Cumartesi ve pazar günlerini çözdüm. Geriye kaldı resmi tatil günleri.
  • 24-09-2023, 15:02:50
    #5
    Üyeliği durduruldu
    igotek adlı üyeden alıntı: mesajı görüntüle
    Teşekkür ederim Cumartesi ve pazar günlerini çözdüm. Geriye kaldı resmi tatil günleri.
    örnek verdiğim kod içerisinde var. özel ve resmi tatilleri elle girmen gerekecek ya da api ile bir yerden çekebilirsin.
  • 24-09-2023, 15:06:38
    #6
    vido adlı üyeden alıntı: mesajı görüntüle
    tam çözüm değil ama yardımcı olabilir.

    bu sayfadan yardım alabilirsin Date fonksiyonu için.
    https://www.w3schools.com/js/js_date_methods.asp
    Verdiğiniz sayfadaki bilgiler işime yaradı, ayrıca sizin verdiğiniz tarih formatını değiştirme kodunu kullandım.
    Türkiyedeki resmi tatil günlerini nasıl işleyebilirim ?
    Tek tek tatil günlerini belirlemek zaman alır. Ama bu bilgiyi bir yerden çekmek illa ki mümkündür diye düşünüyorum.
  • 24-09-2023, 15:11:48
    #7
    Üyeliği durduruldu
    igotek adlı üyeden alıntı: mesajı görüntüle
    Verdiğiniz sayfadaki bilgiler işime yaradı, ayrıca sizin verdiğiniz tarih formatını değiştirme kodunu kullandım.
    Türkiyedeki resmi tatil günlerini nasıl işleyebilirim ?
    Tek tek tatil günlerini belirlemek zaman alır. Ama bu bilgiyi bir yerden çekmek illa ki mümkündür diye düşünüyorum.
    google calendar api yapılabilir.

    https://dev.to/monfernape/get-countr...endar-api-3dh6
    https://stackoverflow.com/a/43783619

    bu iki link yardımcı olabilir.
  • 24-09-2023, 15:15:31
    #8
    İhtiyacı olan olursa diye hazırladığımı paylaşayım. Bu arada js bilmiyorum. Genelde hazır js kodları kullanıyorum. Sadece PHP biliyorum. Bunu verdiğiniz bilgilere dayanarak mantık yürüterek yaptım.


    //BAŞLANGIÇ - TARİH DEĞERİNİ BELİRLE
    //Bugünün tarihini belirle
    //const Today = new Date("2023-09-23")
    const TodayCurrentPrices = new Date();
    //Günlerden Cumartesi(6) ise 1 gün düş
    if (TodayCurrentPrices.getDay() === 6 )
    {
      //Tarihi "2023-09-23" formatından "23.09.2023" formatına çevir
      function formatDate(date)
      {
        const year = date.getFullYear();
          const month = String(date.getMonth() + 1).padStart(2, "0");
          const day = String(date.getDate()-1).padStart(2, "0");
          return `${day}.${month}.${year}`;
      }
    }
    //Günlerden Pazar(0) ise 2 gün düş
    if (TodayCurrentPrices.getDay() === 0 )
    {
      //Tarihi "2023-09-23" formatından "23.09.2023" formatına çevir
      function formatDate(date)
      {
        const year = date.getFullYear();
          const month = String(date.getMonth() + 1).padStart(2, "0");
          const day = String(date.getDate()-2).padStart(2, "0");
          return `${day}.${month}.${year}`;
      }
    }
    //Günlerden Haftaiçi (1-2-3-4-5) ise olduğu gibi ver
    if (TodayCurrentPrices.getDay() === 1 || TodayCurrentPrices.getDay() === 2 || TodayCurrentPrices.getDay() === 3 || TodayCurrentPrices.getDay() === 4 || TodayCurrentPrices.getDay() === 5 )
    {
      //Tarihi "2023-09-23" formatından "23.09.2023" formatına çevir
      function formatDate(date)
      {
        const year = date.getFullYear();
          const month = String(date.getMonth() + 1).padStart(2, "0");
          const day = String(date.getDate()).padStart(2, "0");
          return `${day}.${month}.${year}`;
      }
    }
    const DateOptionTodayCurrentPrices = formatDate(TodayCurrentPrices);
    //BİTİŞ - TARİH DEĞERİNİ BELİRLE
  • 24-09-2023, 15:27:31
    #9
    Üyeliği durduruldu
    function formatDate(date, daysToSubtract) {
      const year = date.getFullYear();
      const month = String(date.getMonth() + 1).padStart(2, "0");
      const day = String(date.getDate() - daysToSubtract).padStart(2, "0");
      return `${day}.${month}.${year}`;
    }
    const todayCurrentPrices = new Date();
    let daysToSubtract = 0;
    if (todayCurrentPrices.getDay() === 6) {
      daysToSubtract = 1;
    } else if (todayCurrentPrices.getDay() === 0) {
      daysToSubtract = 2;
    }
    const dateOptionTodayCurrentPrices = formatDate(todayCurrentPrices, daysToSubtract);
    daha temiz ve okunabilir hale getirdim, arasındaki farkı görebilirsin. formatDate bir fonksiyon ve bunu 3 sefer kullanmışsın. en üstte kalabilir.