জাভাতে মানগুলি সহ কীভাবে তারিখ অবজেক্ট তৈরি করা যায়


91

আমার 2014-02-21 তারিখের জন্য একটি তারিখ অবজেক্ট দরকার। আমি সরাসরি এটি তৈরি করতে পারি না,

Date myDate = new Date(2014, 02, 11);

সুতরাং আমি নীচের মত কাজ করছি,

Calendar myCalendar = new GregorianCalendar(2014, 2, 11);
Date myDate = myCalendar.getTime();

জাভাতে তারিখ অবজেক্ট তৈরি করার কোনও সহজ উপায় আছে?


7
আপনার পদ্ধতির সহজ কি না?
জিওরাশক

4
"কোন সহজ উপায় আছে"? আপনি কী ভাবছেন যে এটি এতটা সহজ নয়? সময় এবং তারিখগুলি আপনার ভাবার চেয়ে অনেক জটিল। একাধিক ক্যালেন্ডার এবং একাধিক সময় অঞ্চল রয়েছে।
রায়েডওয়াল্ড

4
এক লাইনের মতো Date myDate = new GregorianCalendar(2014, 2, 11).getTime();,?
এলিয়ট ফ্রিশ

4
এই প্রশ্নের মধ্যে যেমনটি দেখা যায় তেমন একটি পূর্ণসংখ্যার আক্ষরিক ক্ষেত্রে একটি শীর্ষস্থানীয় শূন্য ব্যবহার করার বিষয়ে সতর্ক থাকুন 02। জাভাতে, এর অর্থ একটি দশমিক (বেস -10) সংখ্যার চেয়ে অষ্টাল (বেস -8 ) নম্বর।
তুলিল বাউরক

4
অবগতির জন্য, যেমন ভয়ঙ্কর বিরক্তিজনক পুরাতন তারিখ-সময় শ্রেণীর java.util.Date, java.util.Calendarএবং java.text.SimpleDateFormatএখন উত্তরাধিকার দ্বারা supplanted java.time জাভা 8 এবং পরে পাতাটা ক্লাস। ওরাকল দ্বারা টিউটোরিয়াল দেখুন ।
তুলসী বাউরক

উত্তর:


108

গোচা: 2 মাস হিসাবে পাস করা আপনাকে অপ্রত্যাশিত ফলাফল দিতে পারে: ক্যালেন্ডার এপিআইতে, মাসটি শূন্য-ভিত্তিক। 2 আসলে মার্চ মানে।

আমি জানি না যে "সহজ" উপায়টি আপনি কীভাবে সন্ধান করছেন যেহেতু আমার কাছে মনে হয় যে ক্যালেন্ডার ব্যবহার করা ইতিমধ্যে যথেষ্ট সহজ।

মাসের জন্য সঠিক ধ্রুবক ব্যবহার করতে ভুলবেন না:

 Date date = new GregorianCalendar(2014, Calendar.FEBRUARY, 11).getTime();

আরেকটি উপায় হ'ল ডেটফরম্যাটটি ব্যবহার করা যা আমার সাধারণত এর মতো ব্যবহার করে:

 public static Date parseDate(String date) {
     try {
         return new SimpleDateFormat("yyyy-MM-dd").parse(date);
     } catch (ParseException e) {
         return null;
     }
  }

যাতে আমি সহজভাবে লিখতে পারি

Date myDate = parseDate("2014-02-14");

তবুও অন্য বিকল্পটি আমি পছন্দ করি: জাভা তারিখ / ক্যালেন্ডার আর ব্যবহার করবেন না। জোডা সময় বা জাভা টাইমে স্যুইচ করুন (ওরফে জেএসআর 310, জেডিকে 8+ এ উপলব্ধ)। আপনি LocalDateএকটি তারিখ উপস্থাপন করতে ব্যবহার করতে পারেন যা সহজেই তৈরি করা যায়

LocalDate myDate =LocalDate.parse("2014-02-14");
// or
LocalDate myDate2 = new LocalDate(2014, 2, 14);
// or, in JDK 8+ Time
LocalDate myDate3 = LocalDate.of(2014, 2, 14);

4
.toTime()অস্তিত্ব নেই। এটি হওয়া উচিত .getTime()( জাভা ডক্স দেখুন )
0xJoKe

একটি টাইপো দুঃখিত। যদিও আমি মনে করি ওপি কল করার জন্য ইতিমধ্যে সঠিক পদ্ধতিটি জানে: পি
অ্যাড্রিয়ান শাম

খুব নিশ্চিত যে আপনি ঠিক আছেন। তবে যারা (আমার মতো) প্রত্যেক বার এটি প্রয়োজন হয় এটির জন্য এটি বিরক্তিকর। ফিক্সিংয়ের জন্য ধন্যবাদ :)
0xJoKe

4
return new SimpleDateFormat("yyyy-mm-dd").parse(date) হওয়া উচিতreturn new SimpleDateFormat("yyyy-MM-dd").parse(date)
aks

ভালো বল ধরা. ডুনো কেন আমি এমন ভুল করেছি। এটি ঠিক করা
অ্যাড্রিয়ান শাম

34

tl; ডা

LocalDate.of( 2014 , 2 , 11 )

যদি আপনি ভয়ানক পুরানো java.util.Dateশ্রেণিটি ব্যবহার করার জন্য জেদ করেন তবে আধুনিক জাভা.টাইম ক্লাস থেকে রূপান্তর করুন ।

java.util.Date                        // Terrible old legacy class, avoid using. Represents a moment in UTC. 
.from(                                // New conversion method added to old classes for converting between legacy classes and modern classes.
    LocalDate                         // Represents a date-only value, without time-of-day and without time zone.
    .of( 2014 , 2 , 11 )              // Specify year-month-day. Notice sane counting, unlike legacy classes: 2014 means year 2014, 1-12 for Jan-Dec.
    .atStartOfDay(                    // Let java.time determine first moment of the day. May *not* start at 00:00:00 because of anomalies such as Daylight Saving Time (DST).
        ZoneId.of( "Africa/Tunis" )   // Specify time zone as `Continent/Region`, never the 3-4 letter pseudo-zones like `PST`, `EST`, or `IST`. 
    )                                 // Returns a `ZonedDateTime`.
    .toInstant()                      // Adjust from zone to UTC. Returns a `Instant` object, always in UTC by definition.
)                                     // Returns a legacy `java.util.Date` object. Beware of possible data-loss as any microseconds or nanoseconds in the `Instant` are truncated to milliseconds in this `Date` object.   

বিশদ

আপনি যদি "সহজ" চান, আপনার জাভা 8 তে নতুন জাভা.টাইম প্যাকেজটি ব্যবহার করা উচিত জাভা ইউটি.ডেট এবং তারিখের। জাভা দিয়ে বান্ডিল করা ক্যালেন্ডার ক্লাসগুলির চেয়ে Java

java.time

Java.time জাভা 8 পাতাটা এবং পরে ফ্রেমওয়ার্ক বিরক্তিজনক পুরাতন java.util.Date/.Calendar শ্রেণীর supplants।

কেবলমাত্র তারিখ

এখানে চিত্র বর্ণনা লিখুন

কোনও LocalDateক্লাস জাভা.টাইমে অফার করে কোনও দিনের সময় বা সময় অঞ্চল ছাড়াই কেবলমাত্র তারিখের মান উপস্থাপন করে। উদাহরণস্বরূপ মন্ট্রিয়ালের চেয়ে প্যারিসে নতুন দিন শুরুর দিকে আপনার একটি তারিখ নির্ধারণ করার জন্য আপনার একটি সময় অঞ্চল প্রয়োজন। ZoneIdবর্গ সময় অঞ্চল জন্য।

ZoneId zoneId = ZoneId.of( "Asia/Singapore" );
LocalDate today = LocalDate.now( zoneId );

কনসোল করতে ডাম্প:

System.out.println ( "today: " + today + " in zone: " + zoneId );

আজ: 2015-11-26 জোনে: এশিয়া / সিঙ্গাপুর

বা বছর, মাস, দিন নির্দিষ্ট করতে কারখানার পদ্ধতি ব্যবহার করুন।

LocalDate localDate = LocalDate.of( 2014 , Month.FEBRUARY , 11 );

স্থানীয় তারিখ: 2014-02-11

অথবা DayOfWeekএনুম অবজেক্টের চেয়ে এক মাসের সংখ্যা 1-12 পাস করুন ।

LocalDate localDate = LocalDate.of( 2014 , 2 , 11 );

সময় অঞ্চল

এখানে চিত্র বর্ণনা লিখুন

একজন LocalDateযতক্ষণ না আপনি এটি একটি সময় অঞ্চল মধ্যে সমন্বয় কোনো সত্যিকারের অর্থ আছে। জাভা.টাইমে, আমরা একটি ZonedDateTimeঅবজেক্ট তৈরি করতে সময় অঞ্চল প্রয়োগ করি । তার মানে সময়ের একটি সময়, তবে কী সময়? সাধারণত দিনের প্রথম মুহুর্তের সাথে যেতে বোধগম্য হয়। আপনি হয়ত ভাবতে পারেন যে সময়টির অর্থ 00:00:00.000, তবে ডাইটলাইট সেভিং টাইম (ডিএসটি) এবং সম্ভবত অন্যান্য অসঙ্গতির কারণে সবসময় সত্য নয়। সেই সময়টি ধরে নেওয়ার পরিবর্তে, আমরা জাভা.টাইমকে ফোন করে দিনের প্রথম মুহূর্তটি নির্ধারণ করতে বলি atStartOfDay

একটি নির্দিষ্ট করুন সঠিক সময় অঞ্চল নাম এর বিন্যাসে continent/regionযেমন America/Montreal, Africa/Casablancaঅথবা Pacific/Auckland। কখনও যেমন 3-4 চিঠি সংক্ষেপ ব্যবহার ESTবা ISTহিসাবে তারা না সত্য সময় অঞ্চল, না মান, এবং এমনকি অনন্য নয় (!)।

ZoneId zoneId = ZoneId.of( "Asia/Singapore" );
ZonedDateTime zdt = localDate.atStartOfDay( zoneId );

zdt: 2014-02-11T00: 00 + 08: 00 [এশিয়া / সিঙ্গাপুর]

ইউটিসি

এখানে চিত্র বর্ণনা লিখুন

ব্যাক-এন্ড কাজের জন্য (ব্যবসায়িক যুক্তি, ডাটাবেস, ডেটা স্টোরেজ এবং এক্সচেঞ্জ) আমরা সাধারণত ইউটিসি সময় অঞ্চল ব্যবহার করি । জাভা.টাইমে Instantক্লাসটি ইউটিসিতে টাইমলাইনে একটি মুহুর্তের প্রতিনিধিত্ব করে। জোনডেটটাইম থেকে কল করে একটি তাত্ক্ষণিক বস্তু বের করা যেতে পারে toInstant

Instant instant = zdt.toInstant();

তাত্ক্ষণিক: 2014-02-10T16: 00: 00Z

রূপান্তর

আপনার java.util.Dateক্লাস পুরোপুরি ব্যবহার করা এড়ানো উচিত । তবে যদি আপনাকে অবশ্যই জাভা.টাইমের জন্য এখনও পুরানো কোডটি আপডেট করা হয়নি তবে আপনি পিছনে এবং পরে রূপান্তর করতে পারেন। পুরানো ক্লাসগুলিতে যুক্ত হওয়া নতুন রূপান্তর পদ্ধতির দিকে নজর দিন।

java.util.Date d = java.util.from( instant ) ;

…এবং…

Instant instant = d.toInstant() ;

আধুনিক ও উত্তরাধিকার উভয় ক্ষেত্রে জাভাতে সমস্ত তারিখ-সময়ের ধরণের সারণী


জাভা.টাইম সম্পর্কে

Java.time ফ্রেমওয়ার্ক জাভা 8 এবং পরে পাতাটা করা হয়। এই ক্লাসগুলি , & , এর মতো সমস্যাযুক্ত পুরানো উত্তরাধিকারের তারিখ-সময়ের ক্লাসগুলিকে সহায়তা করে ।java.util.DateCalendarSimpleDateFormat

আরও জানতে, ওরাকল টিউটোরিয়াল দেখুন । এবং অনেকগুলি উদাহরণ এবং ব্যাখ্যাগুলির জন্য স্ট্যাক ওভারফ্লো অনুসন্ধান করুন। স্পেসিফিকেশনটি জেএসআর 310

Joda-টাইম প্রকল্প, এখন রক্ষণাবেক্ষণ মোড , মাইগ্রেশনে উপদেশ java.time ক্লাস।

আপনি আপনার ডাটাবেসের সাথে জাভা.টাইম অবজেক্টগুলি সরাসরি বিনিময় করতে পারেন । জেডিবিসি ৪.২ বা তারপরের সাথে অনুগত একটি জেডিবিসি ড্রাইভার ব্যবহার করুন । স্ট্রিংগুলির দরকার নেই, ক্লাসের প্রয়োজন নেই । হাইবারনেট 5 এবং জেপিএ 2.2 সমর্থন জাভা.টাইমjava.sql.*

জাভা.টাইম ক্লাস কোথায় পাবেন?


আপডেট: জোদা-টাইম লাইব্রেরিটি এখন রক্ষণাবেক্ষণের মোডে রয়েছে এবং জাভা.টাইম ক্লাসগুলিতে স্থানান্তরের পরামর্শ দেয় । আমি এই বিভাগটি ইতিহাসের জন্য রেখে দিচ্ছি।

জোদা-সময়

এক কিছুর জন্য, জোদা-টাইম বুদ্ধিমান সংখ্যা ব্যবহার করে তাই ফেব্রুয়ারি হয় 2না 1। আরেকটি জিনিস, একটি জোডা-টাইম ডেটটাইম সত্যিকার অর্থে তার নির্ধারিত সময় অঞ্চলটি জবা.উটিল.ডেটের বিপরীতে জানে যা সময় অঞ্চল বলে মনে হয় তবে তা না।

এবং সময় অঞ্চলটি ভুলে যাবেন না। অন্যথায় আপনি জেভিএমের ডিফল্ট পেয়ে যাবেন।

DateTimeZone timeZone = DateTimeZone.forID( "Asia/Singapore" );
DateTime dateTimeSingapore = new DateTime( 2014, 2, 11, 0, 0, timeZone );
DateTime dateTimeUtc = dateTimeSingapore.withZone( DateTimeZone.UTC );

java.util.Locale locale = new java.util.Locale( "ms", "SG" ); // Language: Bahasa Melayu (?). Country: Singapore.
String output = DateTimeFormat.forStyle( "FF" ).withLocale( locale ).print( dateTimeSingapore );

কনসোল করতে ডাম্প ...

System.out.println( "dateTimeSingapore: " + dateTimeSingapore );
System.out.println( "dateTimeUtc: " + dateTimeUtc );
System.out.println( "output: " + output );

যখন চালানো…

dateTimeSingapore: 2014-02-11T00:00:00.000+08:00
dateTimeUtc: 2014-02-10T16:00:00.000Z
output: Selasa, 2014 Februari 11 00:00:00 SGT

রূপান্তর

আপনার যদি অন্য শ্রেণীর সাথে ব্যবহারের জন্য java.util.Date এ রূপান্তর করতে হয় ...

java.util.Date date = dateTimeSingapore.toDate();

4
শুধু একটি মন্তব্য। new DateTime( 2014, 02, 11, 0, 0, timeZone );যেমন ক্ষেত্রগুলিতে শূন্যগুলির উপসর্গ অনুশীলন করা সম্ভবত পছন্দনীয় নয়। যদিও এটি এই ক্ষেত্রে কাজ করে তবে এটি আগস্ট এবং সেপ্টেম্বরের জন্য সংকলন করে না যদি আপনি পাস করে থাকেন 08এবং 090 এর সাথে অক্টাল উপস্থাপনের সাথে কোনও ইনট আক্ষরিক উপস্থাপনা করছেন। এমনকি এটি আপনাকে বছরের পর বছর অপ্রত্যাশিত মান প্রদান করবে 1000, উদাহরণস্বরূপ new DateTime( 0100, 02, 01, 0, 0, timeZone );যে কেউ এটি 100 এড হওয়ার আশা করতে পারে তবে বাস্তবে এটি AD৪ এডি
অ্যাড্রিয়ান শাম

@ অ্যাড্রিয়ানশাম ইয়াইক্স! আমি কখনই জানতাম না যে কোনও পূর্ণসংখ্যার আক্ষরিক শিরোনামের শীর্ষস্থানীয় শূন্যের মতো একটি নিরীহ ছোট্ট টাইপও এর মতো বাজে পার্শ্ব-প্রতিক্রিয়া থাকতে পারে। ধন্যবাদ
তুলসী বাউরক

4
প্রিয় ডাউন-ভোটার, আপনার ভোটের সাথে একটি সমালোচনা ছেড়ে দিন।
বেসিল Bourque

"আপনি যদি ভয়ানক পুরানো java.util.Date ক্লাসটি ব্যবহার করার জন্য জিদ করেন"। অনেক সরবরাহকারী জেডিকে beyond এর বাইরে জাভাতে চালিত টমক্যাট সার্ভারগুলি সরবরাহ করে না, সুতরাং আমি যখন নতুন জিনিসগুলি ব্যবহার করতে আগ্রহী তখন কেউ কেউ অন্যের কারণে পুরানো ছিটে আটকে আছে .....
কিমভিডলিন্ড

@ কিমভিডিলিন্ডে আমার উত্তরটি আরও সাবধানে পুনরায় পড়ুন। গুলি দেখুন। "জাভা এসই 6 এবং জাভা এসই 7" শব্দটি সন্ধান করুন।
তুলসিল বাউরক

14

আমি মনে করি সেরা উপায়টি কোনও SimpleDateFormatঅবজেক্ট ব্যবহার করা হবে ।

DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String dateString = "2014-02-11";
Date dateObject = sdf.parse(dateString); // Handle the ParseException here

Y .. এবং YYYY কখনও ব্যবহার করবেন না - YYYY ব্যবহার করুন - বিশেষত পার্সের পরিবর্তে বিন্যাসের সাথে বিপরীতে যদি এটি করা হয়। আপনি কিছু বিজোড় ফলাফল পেতে !!! এখানে দেখুন: কোড. sololearn.com/c0EYUAOc92uQ/#java
জেজিএফএমকে

9

জাভা 8 থেকে:

import java.time.Instant;
import java.util.Date;

Date date = Date.from(Instant.parse("2000-01-01T00:00:00.000Z"))

2

এটা চেষ্টা কর

 Calendar cal = Calendar.getInstance();
    Date todayDate = new Date();
    cal.setTime(todayDate);

    // Set time fields to zero
    cal.set(Calendar.HOUR_OF_DAY, 0);
    cal.set(Calendar.MINUTE, 0);
    cal.set(Calendar.SECOND, 0);
    cal.set(Calendar.MILLISECOND, 0);
    todayDate = cal.getTime();

1
SimpleDateFormat sdf = new SimpleDateFormat("MMM dd yyyy HH:mm:ss", Locale.ENGLISH);
//format as u want

try {
    String dateStart = "June 14 2018 16:02:37";
    cal.setTime(sdf.parse(dateStart));
    //all done
} catch (ParseException e) {
    e.printStackTrace();
}

জাভা.টাইম ক্লাসগুলি দ্বারা ভয়ঙ্কর Calendarএবং SimpleDateFormatক্লাসগুলি বহু বছর আগে দমন করা হয়েছিল । 2018 এ তাদের ব্যবহারের পরামর্শ দেওয়া হ'ল দুর্বল পরামর্শ।
বাসিল বাউরক

এই উত্তরটি এই প্রশ্নের সুনির্দিষ্ট বিষয়গুলিকে সম্বোধন করে না।
তুলসী বাউরকে

4
"এপিআই স্তরগুলি" দ্বারা আমি ধরে নিয়েছি আপনার অর্থ অ্যান্ড্রয়েড। তবে এটি কোনও অ্যান্ড্রয়েড-নির্দিষ্ট প্রশ্ন নয়। তদ্ব্যতীত, জাভা.টাইম কার্যকারিতা বেশিরভাগ থ্রিটেন-ব্যাকপোর্ট প্রকল্পে জাভা 6 এবং 7 এ ব্যাকপোর্ট করা হয়থ্রিটেনএবিপি প্রকল্পে অ্যান্ড্রয়েডের সাথে আরও মানিয়ে নেওয়া হয়েছে । সুতরাং, এই ভয়ঙ্কর উত্তরাধিকারের তারিখ-সময় ক্লাসগুলি কখনও ব্যবহার করার দরকার নেই। Java.time শ্রেণীর আমূল ভালো।
বাসিল বাউরক

এই মন্তব্যের জন্য ধন্যবাদ। এই লাইব্রেরি তারিখের পার্থক্য এবং সময়ের পার্থক্য মত ফাংশন সরবরাহ করে।
সৈয়দ ড্যানিশ হায়দার

4
হ্যাঁ. এই বিষয়টিতে বিদ্যমান প্রচুর প্রশ্নোত্তরের জন্য স্ট্যাক ওভারফ্লো অনুসন্ধান করুন। এবং থ্রিটেন-এক্সট্রা প্রকল্পটিও দেখুন (প্রারম্ভিক অ্যান্ড্রয়েডে ব্যাক- পোর্টড নয়)।
তুলিল বাউরক

0

সহজ উপায়:

Date date = Date.valueOf("2000-1-1");
LocalDate localdate = LocalDate.of(2000,1,1);
LocalDateTime localDateTime = LocalDateTime.of(2000,1,1,0,0);

java.sql.Dateআপনি যে ক্লাসটি ব্যবহার করছেন তা খারাপ নকশা করা এবং দীর্ঘকালীন হয়ে যাওয়ার কারণে প্রথমটি এড়ানো উচিত । আমি LocalDateদ্বিতীয় লাইনে যেমন ব্যবহার করার পরামর্শ দিচ্ছি । আমার অভ্যাসটি হ'ল LocalDate.of(2000, Month.JANUARY, 1), আমি এটি পড়ার বিষয়টি আরও পরিষ্কার করে দেখছি।
ওলে ভিভি

এবং কারণ উত্তরটিতে স্থানীয় তারিখের ঘোষণাপত্র রয়েছে, কেবল তারিখের অবজেক্টটিই জিজ্ঞাসা করা হয়নি (অবহেলিত নয় এবং কখনও কখনও ব্যবহৃত হয়) ...
অ্যাডাম সাইলেনকো

-1
import java.io.*;
import java.util.*;
import java.util.HashMap;

public class Solution 
{

    public static void main(String[] args)
    {
        HashMap<Integer,String> hm = new HashMap<Integer,String>();
        hm.put(1,"SUNDAY");
        hm.put(2,"MONDAY");
        hm.put(3,"TUESDAY");
        hm.put(4,"WEDNESDAY");
        hm.put(5,"THURSDAY");
        hm.put(6,"FRIDAY");
        hm.put(7,"SATURDAY");
        Scanner in = new Scanner(System.in);
        String month = in.next();
        String day = in.next();
        String year = in.next();

        String format = year + "/" + month + "/" + day;
        Date date = null;
        try
        {
            SimpleDateFormat formatter = new SimpleDateFormat("yyyy/MM/dd");
            date = formatter.parse(format);
        }
        catch(Exception e){
        }
        Calendar c = Calendar.getInstance();
        c.setTime(date);
        int dayOfWeek = c.get(Calendar.DAY_OF_WEEK);
        System.out.println(hm.get(dayOfWeek));
    }
}

আমাদের অনুসারে তারিখটি ফর্ম্যাট করতে সিম্পলডিটফর্ম্যাট ফর্ম্যাটর ব্যবহার করা যেতে পারে। এবং তারপরে তারিখ অবজেক্টের ভিতরে পার্সিং করা। উপরের প্রোগ্রামটি দেখায় যে কোনও তারিখ দিয়ে সপ্তাহের দিনগুলি কীভাবে পাবেন।
অঙ্কুশ

-5

আমি মনে করি আপনার তারিখ পিএইচপি থেকে আসে এবং এটি এইচটিএমএল (ডোম) এ লেখা হয় বা? সমস্ত তারিখ এবং টাইমস্ট্যাম্পগুলি প্রস্তুত করার জন্য আমার কাছে একটি পিএইচপি ফাংশন রয়েছে। এটি এমন একটি গঠন ফিরে আসে যা দরকার।

$timeForJS = timeop($datetimeFromDatabase['payedon'], 'js', 'local'); // save 10/12/2016 09:20 on var

এই তারিখটি নতুন তারিখ তৈরি করতে js তে ব্যবহার করা যেতে পারে ...

<html>
   <span id="test" data-date="<?php echo $timeForJS; ?>"></span>
   <script>var myDate = new Date( $('#test').attr('data-date') );</script>
</html>

আমি যা বলব তা হল, মোড়ানোর জন্য আপনার নিজস্ব ফাংশন তৈরি করুন, যা আপনার জীবনকে আরও সহজ করে তুলবে। আপনি আমাদের নমুনা হিসাবে আমার ফানক করতে পারেন তবে আমার সিমসে অন্তর্ভুক্ত আপনি 1 থেকে 1 অনুলিপি এবং পেস্ট করতে পারবেন না :)

    function timeop($utcTime, $for, $tz_output = 'system')
{
    // echo "<br>Current time ( UTC ): ".$wwm->timeop('now', 'db', 'system');
    // echo "<br>Current time (USER): ".$wwm->timeop('now', 'db', 'local');
    // echo "<br>Current time (USER): ".$wwm->timeop('now', 'D d M Y H:i:s', 'local');
    // echo "<br>Current time with user lang (USER): ".$wwm->timeop('now', 'datetimes', 'local');

    // echo '<br><br>Calculator test is users timezone difference != 0! Tested with "2014-06-27 07:46:09"<br>';
    // echo "<br>Old time (USER -> UTC): ".$wwm->timeop('2014-06-27 07:46:09', 'db', 'system');
    // echo "<br>Old time (UTC -> USER): ".$wwm->timeop('2014-06-27 07:46:09', 'db', 'local');

    /** -- */
    // echo '<br><br>a Time from db if same with user time?<br>';
    // echo "<br>db-time (2019-06-27 07:46:09) time left = ".$wwm->timeleft('2019-06-27 07:46:09', 'max');
    // echo "<br>db-time (2014-06-27 07:46:09) time left = ".$wwm->timeleft('2014-06-27 07:46:09', 'max', 'txt');

    /** -- */
    // echo '<br><br>Calculator test with other formats<br>';
    // echo "<br>2014/06/27 07:46:09: ".$wwm->ntimeop('2014/06/27 07:46:09', 'db', 'system');

    switch($tz_output){
        case 'system':
            $tz = 'UTC';
            break;

        case 'local':
            $tz = $_SESSION['wwm']['sett']['tz'];
            break;

        default:
            $tz = $tz_output;
            break;
    }

    $date = new DateTime($utcTime,  new DateTimeZone($tz));

    if( $tz != 'UTC' ) // Only time converted into different time zone
    {
        // now check at first the difference in seconds
        $offset = $this->tz_offset($tz);
        if( $offset != 0 ){
            $calc = ( $offset >= 0  ) ? 'add' : 'sub';
            // $calc = ( ($_SESSION['wwm']['sett']['tzdiff'] >= 0 AND $tz_output == 'user') OR ($_SESSION['wwm']['sett']['tzdiff'] <= 0 AND $tz_output == 'local') ) ? 'sub' : 'add';
            $offset = ['math' => $calc, 'diff' => abs($offset)];
            $date->$offset['math']( new DateInterval('PT'.$offset['diff'].'S') ); // php >= 5.3 use add() or sub()
        }
    }

    // create a individual output
    switch( $for ){
        case 'js':
            $format = 'm/d/Y H:i'; // Timepicker use only this format m/d/Y H:i without seconds // Sett automatical seconds default to 00
            break;
        case 'js:s':
            $format = 'm/d/Y H:i:s'; // Timepicker use only this format m/d/Y H:i:s with Seconds
            break;
        case 'db':
            $format = 'Y-m-d H:i:s'; // Database use only this format Y-m-d H:i:s
            break;
        case 'date':
        case 'datetime':
        case 'datetimes':
            $format = wwmSystem::$languages[$_SESSION['wwm']['sett']['isolang']][$for.'_format']; // language spezific output
            break;
        default:
            $format = $for;
            break;
    }

    $output = $date->format( $format );

    /** Replacement
     * 
     * D = day short name
     * l = day long name
     * F = month long name
     * M = month short name
     */
    $output = str_replace([
        $date->format('D'),
        $date->format('l'),
        $date->format('F'),
        $date->format('M')
    ],[
        $this->trans('date', $date->format('D')),
        $this->trans('date', $date->format('l')),
        $this->trans('date', $date->format('F')),
        $this->trans('date', $date->format('M'))
    ], $output);

    return $output; // $output->getTimestamp();
}

4
আপনি পিএইচপি-তে একটি উত্তর দিয়ে 2 বছরের পুরানো জাভা প্রশ্নের উত্তর দিচ্ছেন কেন?
অ্যালান হে
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.