DateIntervalFormatter — তারিখ ব্যবধান ফর্ম্যাটিংয়ের মৌলিক বিষয়

লেখক: IT Sectr প্রকাশিত: 2026-07-13 পড়ার সময়: 11 মিনিট

DateIntervalFormatter হল iOS এবং macOS-এ Foundation-এর একটি ক্লাস যা তারিখের রেঞ্জকে স্থানীয়কৃত স্ট্রিং-এ ফর্ম্যাট করার জন্য ডিজাইন করা হয়েছে: “২১–২৫ জুলাই ২০২৪”, “২১ থেকে ২৫ জুলাই ২০২৪” বা “Jul ২১–২৫, ২০২৪”। Apple Developer Documentation, 2024 অনুসারে, DateIntervalFormatter স্বয়ংক্রিয়ভাবে নির্ধারণ করে কোন তারিখের উপাদানগুলি পুনরাবৃত্তি করতে হবে (যদি রেঞ্জটি এক মাসের মধ্যে হয়, মাসটি একবার দেখানো হয়), এবং বিভাজক এবং শব্দের ক্রম স্থানীয়করণ করে। দুটি ফর্ম্যাট করা তারিখ ম্যানুয়ালি যুক্ত করার বিপরীতে, এই ক্লাসটি ভাষার ব্যাকরণগত নিয়ম বিবেচনা করে। ক্লাসটি iOS 8 এবং macOS 10.10 থেকে উপলব্ধ।

মূল পয়েন্ট

  • DateIntervalFormatter — তারিখের রেঞ্জ ফর্ম্যাট করার জন্য Foundation ক্লাস (iOS 8+)
  • স্বয়ংক্রিয় গ্রুপিং — পুনরাবৃত্ত উপাদান (মাস, বছর) একবার দেখানো হয়
  • স্থানীয়কৃত বিভাজক — ব্যাকরণগত নিয়ম: “থেকে” (বাংলা), ড্যাশ (ইংরেজি)
  • পাঁচটি তারিখ স্টাইল — .none, .short, .medium, .long, .full রেঞ্জের প্রতিটি প্রান্তের জন্য
  • চারটি সময় স্টাইল — রেঞ্জের সময় অংশের জন্য একই বিশদ স্তর

DateIntervalFormatter কী?

DateIntervalFormatter হল Foundation-এ Formatter-এর একটি উপশ্রেণী যা একটি DateInterval অবজেক্ট (দুটি তারিখের মধ্যে একটি রেঞ্জ) নেয় এবং সেই রেঞ্জ বর্ণনা করে একটি স্থানীয়কৃত স্ট্রিং ফেরত দেয়। উদাহরণস্বরূপ, ২১ থেকে ২৫ জুলাই ২০২৪ রেঞ্জের জন্য, ফলাফল bn_BD-এর জন্য “২১–২৫ জুলাই ২০২৪” হবে। ক্লাসটি বুদ্ধিমত্তার সাথে পুনরাবৃত্ত উপাদানগুলি গ্রুপ করে: যদি উভয় তারিখ একই মাসে হয়, মাসের নাম একবার দেখানো হয়।

DateIntervalFormatter-এর প্রধান মান হল রেঞ্জ ব্যাকরণের স্বয়ংক্রিয় পরিচালনা। ম্যানুয়ালি ফর্ম্যাট করার সময়, একজন ডেভেলপারকে শুরু/শেষ মাস/বছর তুলনা করতে হবে, একটি বিভাজক বেছে নিতে হবে (ড্যাশ, “থেকে”, “bis”), এবং বিভক্তি পরিচালনা করতে হবে। DateIntervalFormatter CLDR (কমন লোকেল ডেটা রিপজিটরি) ডেটার উপর ভিত্তি করে স্বয়ংক্রিয়ভাবে এটি করে, আন্তর্জাতিক অ্যাপ্লিকেশনগুলিতে বাগ কমায়, বিশেষ করে জটিল ব্যাকরণযুক্ত ভাষাগুলির জন্য।

Unicode CLDR v44 (2024) অনুসারে, তারিখ ব্যবধান ফর্ম্যাটিং নিয়ম ভাষাগুলির মধ্যে উল্লেখযোগ্যভাবে পরিবর্তিত হয়। জার্মান “bis” (২১.–২৫. Juli ২০২৪) অব্যয় ব্যবহার করে, ফরাসি “au” (du ২১ au ২৫ juillet ২০২৪) ব্যবহার করে, জাপানি হাইফেন (২০২৪ Jul ২১–২৫) ব্যবহার করে। DateIntervalFormatter ডেভেলপারের পক্ষ থেকে অতিরিক্ত কোড ছাড়াই এই সমস্ত বৈচিত্র্য কভার করে।

Foundation-এ DateIntervalFormatter কীভাবে কাজ করে?

কাজের নীতি DateIntervalFormatter-এর একটি রেঞ্জ গঠনকারী দুটি তারিখ বিশ্লেষণ এবং লোকেল বিবেচনা করে সর্বোত্তম স্ট্রিং উপস্থাপনা নির্বাচনের উপর ভিত্তি করে। ক্লাসটি তারিখের উপাদানগুলি (বছর, মাস, দিন) তুলনা করে এবং গ্রুপিং সিদ্ধান্ত নেয়: যদি বছর একই হয়, এটি একবার দেখানো হয়; যদি মাস একই হয়, এটি একবার দেখানো হয়; যদি দিন ভিন্ন হয়, একটি দিনের রেঞ্জ দেখানো হয়।

রেঞ্জbn_BD
এক দিন২১ জুলাই ২০২৪
মাসের মধ্যে২১–২৫ জুলাই ২০২৪
ভিন্ন মাস২১ জুলাই – ৫ আগস্ট ২০২৪
ভিন্ন বছর২৫ ডিসেম্বর ২০২৪ – ৫ জানুয়ারি ২০২৫
সময় সহ২১ জুলাই ২০২৪, ১৪:৩০–১৬:৪৫

গ্রুপিং লজিক CLDR টেমপ্লেটের উপর ভিত্তি করে প্রয়োগ করা হয়েছে। ফর্ম্যাটার প্রতিটি তারিখ উপাদানের (Calendar.Component: year, month, day) সমতা বড় থেকে ছোট ক্রমে পরীক্ষা করে। একবার একটি উপাদান ভিন্ন হলে, সমস্ত ছোট উপাদান উভয় তারিখের জন্য দেখানো হয়। উদাহরণস্বরূপ, ২১–২৫ জুলাইয়ের জন্য: বছর মেলে, মাস মেলে, দিন ভিন্ন → মাস একবার দেখানো হয়, দিন প্রতিটি তারিখের জন্য দেখানো হয়।

গুরুত্বপূর্ণ নোট: DateIntervalFormatter API-এর মাধ্যমে বিভাজক কাস্টমাইজ করা সমর্থন করে না। বিভাজক লোকেল দ্বারা নির্ধারিত হয় এবং ওভাররাইড করা যায় না। যদি একটি অ-মানক বিভাজকের প্রয়োজন হয় (উদাহরণস্বরূপ, “থেকে” এর পরিবর্তে “পর্যন্ত”), তাহলে আপনাকে DateFormatter ব্যবহার করে ম্যানুয়ালি তারিখগুলি ফর্ম্যাট করতে হবে এবং একটি কাস্টম বিভাজকের সাথে স্ট্রিংগুলি সংযুক্ত করতে হবে।

ব্যবধান ফর্ম্যাটিং স্টাইল

DateIntervalFormatter দুটি সেট স্টাইল প্রদান করে: dateStyle এবং timeStyle রেঞ্জের প্রতিটি প্রান্তের জন্য। এই স্টাইলগুলি DateFormatter-এর মতো কাজ করে: .none উপাদানটি লুকায়, .short একটি সংক্ষিপ্ত ফর্ম্যাট দেয় (২১/০৭/২০২৪), .medium (২১ জুল ২০২৪), .long (২১ জুলাই ২০২৪), .full (রবিবার, ২১ জুলাই ২০২৪)। dateStyle এবং timeStyle একত্রিত করে, বিশদের বিভিন্ন স্তর অর্জন করা যেতে পারে।

স্টাইল সংমিশ্রণের উদাহরণ

  • dateStyle = .medium, timeStyle = .none — শুধু তারিখ: “২১–২৫ জুলাই ২০২৪”
  • dateStyle = .short, timeStyle = .short — তারিখ এবং সময়: “২১/০৭/২০২৪, ১৪:৩০ – ২৫/০৭/২০২৪, ১৬:৪৫”
  • dateStyle = .none, timeStyle = .short — শুধু সময়: “১৪:৩০–১৬:৪৫” (যদি তারিখগুলি একই হয়)
  • dateStyle = .long, timeStyle = .none — দীর্ঘ তারিখ: “২১–২৫ জুলাই ২০২৪”
  • dateStyle = .full, timeStyle = .short — পূর্ণ ফর্ম্যাট: “রবিবার, ২১ জুলাই ২০২৪ – বৃহস্পতিবার, ২৫ জুলাই ২০২৪”

গুরুত্বপূর্ণ: dateStyle এবং timeStyle রেঞ্জের উভয় প্রান্তে সমানভাবে প্রয়োগ হয়। আপনি শুরু এবং শেষের জন্য ভিন্ন স্টাইল সেট করতে পারবেন না (যেমন, শুরুর জন্য .medium এবং শেষের জন্য .short)। যদি ভিন্ন স্টাইলের প্রয়োজন হয়, তাহলে আপনাকে প্রতিটি তারিখ একটি আলাদা DateFormatter দিয়ে ফর্ম্যাট করতে হবে এবং ফলাফলগুলি সংযুক্ত করতে হবে।

swift
import Foundation

let formatter = DateIntervalFormatter()

// বিভিন্ন স্টাইল সংমিশ্রণ
let startDate = Date()
let endDate = Date().addingTimeInterval(345600) // +৪ দিন
let interval = DateInterval(start: startDate, end: endDate)

// শুধু তারিখ, মাঝারি ফর্ম্যাট
formatter.dateStyle = .medium
formatter.timeStyle = .none
print("শুধু তারিখ: \(formatter.string(from: interval))")

// সময় সহ সংক্ষিপ্ত ফর্ম্যাট
formatter.dateStyle = .short
formatter.timeStyle = .short
print("সময় সহ সংক্ষিপ্ত: \(formatter.string(from: interval))")

// পূর্ণ ফর্ম্যাট
formatter.dateStyle = .full
formatter.timeStyle = .none
print("পূর্ণ তারিখ: \(formatter.string(from: interval))")

Swift-এ DateIntervalFormatter: উদাহরণ

মৌলিক ব্যবহার DateIntervalFormatter-এর একটি ইনস্ট্যান্স তৈরি করা, স্টাইল সেট করা এবং string(from:) কল করা অন্তর্ভুক্ত। পদ্ধতিটি DateInterval গ্রহণ করে, যা start এবং end বৈশিষ্ট্যযুক্ত একটি কাঠামো। DateInterval দুটি Date মান থেকে তৈরি করা যেতে পারে বা Duration (iOS 16+) দিয়ে শুরু করা যেতে পারে। ফর্ম্যাটিংয়ের পরে, ফলাফল অতিরিক্ত প্রক্রিয়াকরণ ছাড়াই UI প্রদর্শনের জন্য প্রস্তুত।

swift
import Foundation

let calendar = Calendar.current
let now = Date()

// নির্দিষ্ট ব্যবধানের উদাহরণ
let examples: [(title: String, start: Date, end: Date)] = [
    (
        "2-hour event",
        now,
        now.addingTimeInterval(7200)
    ),
    (
        "Week-long vacation",
        now,
        now.addingTimeInterval(604800)
    ),
    (
        "Cross-year period",
        calendar.date(from: DateComponents(
            year: 2024, month: 12, day: 25
        ))!,
        calendar.date(from: DateComponents(
            year: 2025, month: 1, day: 5
        ))!
    )
]

let intervalFormatter = DateIntervalFormatter()
intervalFormatter.dateStyle = .medium
intervalFormatter.timeStyle = .short

for (title, start, end) in examples {
    let interval = DateInterval(start: start, end: end)
    let result = intervalFormatter.string(from: interval)
    print("\(title): \(result)")
}

// Calendar-এর মাধ্যমে ফর্ম্যাট (iOS 16+)
if let nextWeek = calendar.date(
    byAdding: .day, value: 7, to: now
) {
    let weekInterval = DateInterval(start: now, end: nextWeek)
    print("পরবর্তী ৭ দিন: \(intervalFormatter.string(from: weekInterval))")
}

DateIntervalFormatter এবং ক্যালেন্ডার বুকিং: বুকিং অ্যাপ্লিকেশনগুলিতে (হোটেল, টিকেট), তারিখের ব্যবধান একটি মূল UI উপাদান। DateIntervalFormatter আন্তঃ-বছরের ব্যবধানগুলি সঠিকভাবে পরিচালনা করে (যেমন, ২৮ ডিসেম্বর থেকে ৩ জানুয়ারি), প্রতিটি তারিখের জন্য আলাদাভাবে মাস এবং বছর গ্রুপ করে। এই ধরনের পরিস্থিতির জন্য, dateStyle = .medium এবং timeStyle = .none ব্যবহার করার পরামর্শ দেওয়া হয়, যা সময় ছাড়া তারিখের জন্য সবচেয়ে পঠনযোগ্য ফর্ম্যাট।

swift
import Foundation

let formatter = DateIntervalFormatter()
formatter.dateStyle = .long
formatter.timeStyle = .none

// বুকিং উদাহরণ
struct Booking {
    let checkIn: Date
    let checkOut: Date

    var formattedInterval: String {
        let interval = DateInterval(start: checkIn, end: checkOut)
        return formatter.string(from: interval)
    }
}

let booking = Booking(
    checkIn: calendar.date(from: DateComponents(
        year: 2024, month: 7, day: 21
    ))!,
    checkOut: calendar.date(from: DateComponents(
        year: 2024, month: 7, day: 25
    ))!
)
print("বুকিং: \(booking.formattedInterval)")

// বিভিন্ন লোকেলের সাথে ব্যবহার
let enFormatter = DateIntervalFormatter()
enFormatter.dateStyle = .medium
enFormatter.timeStyle = .none
enFormatter.locale = Locale(identifier: "en_US")
print("ইংরেজি: \(enFormatter.string(from: interval))")

DateInterval বনাম DateIntervalFormatter: DateInterval একটি কাঠামো যা একটি তারিখের রেঞ্জ (শুরু এবং শেষ) উপস্থাপন করে। DateIntervalFormatter একটি ফর্ম্যাটার যা এই কাঠামোটিকে একটি স্ট্রিংয়ে রূপান্তর করে। DateInterval contains(Date) চেক এবং intersection(with:) সমর্থন করে, যা বুকিং লজিকের (তারিখ ওভারল্যাপ চেক) জন্য দরকারী।

তারিখ ব্যবধানের স্থানীয়করণ

DateIntervalFormatter locale বৈশিষ্ট্যের মাধ্যমে আউটপুট স্থানীয়করণ করে। ডিফল্টরূপে, Locale.current ব্যবহার করা হয়, ডিভাইসের লোকেল। অন্য ভাষায় ব্যবধান প্রদর্শন করতে (যেমন, বাংলা ইন্টারফেসের সাথে ইংরেজি বিষয়বস্তু), locale স্পষ্টভাবে সেট করুন। DateFormatter-এর বিপরীতে, DateIntervalFormatter-এর সার্ভার-সাইড ডেটার জন্য locale সেট করার প্রয়োজন নেই। এটি সর্বদা তার অভ্যন্তরীণ CLDR-ভিত্তিক গ্রুপিং লজিক ব্যবহার করে।

তারিখ ব্যবধান ফর্ম্যাটিংয়ে ভাষাগত পার্থক্য একক তারিখের তুলনায় উল্লেখযোগ্যভাবে বেশি জটিল। বাংলা “থেকে” অব্যয় ব্যবহার করে: ২১ থেকে ২৫ জুলাই। ইংরেজি একটি সরল ড্যাশ ব্যবহার করে: Jul ২১–২৫। ফরাসি “au” অব্যয় ব্যবহার করে: du ২১ au ২৫ juillet। জার্মান সংখ্যার পরে একটি বিন্দু এবং ড্যাশ ব্যবহার করে: ২১.–২৫. Juli। DateIntervalFormatter এই সমস্ত বৈচিত্র্য কভার করে।

swift
import Foundation

let formatter = DateIntervalFormatter()
formatter.dateStyle = .medium
formatter.timeStyle = .none

let start = Date()
let end = Date().addingTimeInterval(259200) // +৩ দিন
let interval = DateInterval(start: start, end: end)

// বিভিন্ন লোকেল প্রদর্শন করুন
let localeIds = ["ru_RU", "en_US", "de_DE", "fr_FR", "ja_JP", "zh_CN"]
for localeId in localeIds {
    formatter.locale = Locale(identifier: localeId)
    print("\(localeId): \(formatter.string(from: interval))")
}

// সময় ব্যবধানের জন্য স্থানীয়করণ
formatter.dateStyle = .none
formatter.timeStyle = .short

let todayStart = Date()
let todayEnd = Date().addingTimeInterval(3600)
let timeInterval = DateInterval(start: todayStart, end: todayEnd)

for localeId in ["ru_RU", "en_US", "de_DE"] {
    formatter.locale = Locale(identifier: localeId)
    print("\(localeId) সময়: \(formatter.string(from: timeInterval))")
}

স্থানীয়করণের বিশেষত্ব: বাংলার জন্য, DateIntervalFormatter দীর্ঘ ফর্ম্যাটের জন্য “থেকে” অব্যয় ব্যবহার করে। সংক্ষিপ্ত ফর্ম্যাটের জন্য, এটি ড্যাশ ব্যবহার করে। ফর্ম্যাটের পছন্দ প্রসঙ্গের উপর নির্ভর করে: বুকিং তালিকার জন্য .medium ব্যবহার করুন, বিস্তারিত দৃশ্যের জন্য .long বা .full ব্যবহার করুন।

অন্যান্য তারিখ ফর্ম্যাটারের সাথে তুলনা

DateIntervalFormatter তারিখের রেঞ্জ ফর্ম্যাট করার ক্ষেত্রটি পূরণ করে, যা অন্যান্য Foundation ক্লাস দ্বারা কভার করা হয় না। DateFormatter একক তারিখ ফর্ম্যাট করে, RelativeDateTimeFormatter আপেক্ষিক তারিখ ফর্ম্যাট করে (আগে/মধ্যে), DateComponentsFormatter সময়কাল ফর্ম্যাট করে (২ ঘন্টা ৩০ মিনিট)। এই প্রতিটি ক্লাস একটি নির্দিষ্ট কাজ সমাধান করে এবং এগুলি পরস্পর পরিবর্তে ব্যবহার করা যায় না।

ক্লাসউদ্দেশ্যআউটপুট উদাহরণ
DateIntervalFormatterতারিখের রেঞ্জ২১–২৫ জুলাই ২০২৪
DateFormatterএকক তারিখ২১ জুলাই ২০২৪
RelativeDateTimeFormatterআপেক্ষিক সময়৩ দিন আগে
DateComponentsFormatterসময়কাল২ ঘন্টা ৩০ মিনিট
ISO8601DateFormatterISO 8601 ফর্ম্যাট২০২৪-০৭-২১T১৪:৩০:০০Z

কখন DateIntervalFormatter ব্যবহার করবেন: UI-তে তারিখের রেঞ্জ প্রদর্শনের জন্য — হোটেল বুকিং, ইভেন্ট, তারিখ ফিল্টারিং, অপারেশন ইতিহাস। তারিখের মধ্যে সময়কাল গণনা করার জন্য, DateComponentsFormatter ব্যবহার করুন, DateIntervalFormatter নয়, কারণ পরবর্তীটি সময়কাল প্রদর্শনের জন্য ডিজাইন করা হয়নি। DateFormatter শুধুমাত্র একক তারিখের জন্য ব্যবহার করা উচিত, স্ট্রিং সংযোজনের মাধ্যমে দুটি ফর্ম্যাট করা তারিখ সংযুক্ত করার জন্য নয়, কারণ এটি বিভাজক স্থানীয়করণ হারায়।

এজ কেস: DateIntervalFormatter খোলা-শেষের ব্যবধান (শেষ তারিখ ছাড়া) প্রদর্শন সমর্থন করে না। যদি রেঞ্জের শেষ অজানা হয় (যেমন, “২১ জুলাই থেকে”), তাহলে “থেকে” অব্যয় সহ DateFormatter ব্যবহার করুন। এছাড়াও, DateIntervalFormatter বিভিন্ন দিনের জন্য নির্দিষ্ট সময় সহ ব্যবধান সমর্থন করে না। সময় প্রতিটি তারিখে আলাদাভাবে প্রয়োগ করা হয়, যা ছোট ব্যবধানের জন্য অপ্রয়োজনীয় মনে হতে পারে।

সচরাচর জিজ্ঞাসিত প্রশ্ন

DateIntervalFormatter কী?

DateIntervalFormatter Foundation-এর একটি ক্লাস যা তারিখের রেঞ্জকে স্থানীয়কৃত স্ট্রিংয়ে ফর্ম্যাট করে। iOS 8 থেকে উপলব্ধ, এটি স্বয়ংক্রিয়ভাবে পুনরাবৃত্ত উপাদানগুলি (মাস, বছর) গ্রুপ করে এবং ভাষার জন্য সঠিক বিভাজক নির্বাচন করে।

DateIntervalFormatter কীভাবে তারিখ গ্রুপ করে?

এটি উপাদানগুলির তুলনা বছর থেকে দিন পর্যন্ত করে। যদি বছর মেলে, এটি একবার দেখানো হয়। যদি মাস মেলে, এটি একবার দেখানো হয়। ভিন্ন দিনগুলি একটি রেঞ্জ হিসাবে দেখানো হয়। এটি “২১ জুলাই ২০২৪ – ২৫ জুলাই ২০২৪” এর পরিবর্তে “২১–২৫ জুলাই ২০২৪” দেয়।

আমি কি রেঞ্জ বিভাজক পরিবর্তন করতে পারি?

না, বিভাজক লোকেল দ্বারা নির্ধারিত হয় এবং API-এর মাধ্যমে কাস্টমাইজ করা যায় না। একটি কাস্টম বিভাজকের জন্য (যেমন, “থেকে” এর পরিবর্তে “পর্যন্ত”), প্রতিটি তারিখ একটি আলাদা DateFormatter দিয়ে ফর্ম্যাট করুন এবং ম্যানুয়ালি স্ট্রিংগুলি সংযুক্ত করুন।

DateIntervalFormatter কীভাবে DateFormatter থেকে আলাদা?

DateIntervalFormatter একটি তারিখের রেঞ্জ (দুটি তারিখ) উপাদান গ্রুপিং সহ একটি একক ইউনিট হিসাবে ফর্ম্যাট করে। DateFormatter একটি একক তারিখ ফর্ম্যাট করে। রেঞ্জের জন্য, সর্বদা DateIntervalFormatter ব্যবহার করুন কারণ এটি সঠিক বিভাজক স্থানীয়করণ প্রদান করে।

বিভিন্ন বছরযুক্ত একটি ব্যবধান কীভাবে ফর্ম্যাট করবেন?

স্বয়ংক্রিয়ভাবে — DateIntervalFormatter সনাক্ত করে যে বছরগুলি ভিন্ন এবং উভয় প্রান্তের জন্য পূর্ণ তারিখ প্রদর্শন করে: “২৫ ডিসেম্বর ২০২৪ – ৫ জানুয়ারি ২০২৫”। কোনও অতিরিক্ত কনফিগারেশনের প্রয়োজন নেই, শুধু dateStyle সেট করুন।

সারসংক্ষেপ

  • DateIntervalFormatter — তারিখের রেঞ্জ ফর্ম্যাট করার জন্য বিশেষায়িত ক্লাস (iOS 8+)
  • স্বয়ংক্রিয় গ্রুপিং — পুনরাবৃত্ত উপাদান (বছর, মাস) পুরো রেঞ্জের জন্য একবার দেখানো হয়
  • স্থানীয়কৃত বিভাজক — “থেকে” (বাংলা), “bis” (জার্মান) স্বয়ংক্রিয়ভাবে
  • তারিখ এবং সময় স্টাইল — .none, .short, .medium, .long, .full-এর সংমিশ্রণ রেঞ্জের প্রতিটি প্রান্তের জন্য
  • সময়কালের জন্য নয় — সময়কাল গণনার জন্য DateComponentsFormatter ব্যবহার করুন
  • কোনও কাস্টম বিভাজক নেই — অ-মানক ক্ষেত্রের জন্য ম্যানুয়াল ফর্ম্যাটিং প্রয়োজন
  • DateInterval-এর সাথে একীকরণ — DateInterval কাঠামো contains এবং intersection চেক প্রদান করে

আমরা একটি মোবাইল অ্যাপ্লিকেশন টার্নকি তৈরি করব

IT Sectr 2017 সাল থেকে স্টার্টআপ এবং ব্যবসার জন্য iOS এবং Android অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।

প্রকল্প নিয়ে আলোচনা করুন

আরও পড়ুন