পিএইচপি-তে কীভাবে তারিখকে টাইমস্ট্যাম্পে রূপান্তর করবেন?


350

উদাহরণস্বরূপ আমি কীভাবে টাইমস্ট্যাম্প পাব 22-09-2008?

উত্তর:


612


এই পদ্ধতি কাজ করে উভয় উইন্ডোজ এবং ইউনিক্স এবং হয় সময় অঞ্চল সম্ভবত হলে আপনার সাথে কাজ কি আপনি চান সচেতন, তারিখ

আপনি যদি সময় অঞ্চল সম্পর্কে চিন্তা না করেন বা আপনার সার্ভারটি যে সময় অঞ্চল ব্যবহার করে তা ব্যবহার করতে চান:

$d = DateTime::createFromFormat('d-m-Y H:i:s', '22-09-2008 00:00:00');
if ($d === false) {
    die("Incorrect date string");
} else {
    echo $d->getTimestamp();
}

1222093324 (এটি আপনার সার্ভারের সময় অঞ্চলের উপর নির্ভর করে পৃথক হবে ...)


আপনি যদি কোন সময় অঞ্চলে নির্দিষ্ট করতে চান তবে এখানে EST। (নিউ ইয়র্ক হিসাবে একই।)

$d = DateTime::createFromFormat(
    'd-m-Y H:i:s',
    '22-09-2008 00:00:00',
    new DateTimeZone('EST')
);

if ($d === false) {
    die("Incorrect date string");
} else {
    echo $d->getTimestamp();
}

1222093305


অথবা ইউটিসি ব্যবহার করতে চাইলে । (" GMT " হিসাবে একই ।)

$d = DateTime::createFromFormat(
    'd-m-Y H:i:s',
    '22-09-2008 00:00:00',
    new DateTimeZone('UTC')
);

if ($d === false) {
    die("Incorrect date string");
} else {
    echo $d->getTimestamp();
}

1222093289


নির্বিশেষে, কাঠামোগত ডেটাগুলিতে স্ট্রিংগুলি পার্স করার সময় কঠোর হওয়া সর্বদা একটি ভাল সূচনার পয়েন্ট। এটি ভবিষ্যতে বিশ্রী ডিবাগিং সংরক্ষণ করতে পারে। তাই আমি সর্বদা তারিখের ফর্ম্যাট নির্দিষ্ট করার পরামর্শ দিই।


2
মার্জিত। আমি ভুলে গিয়েছিলাম যে সম্পর্কে!
পর্যন্ত

53
আপনি কীভাবে এখনও এই উত্তরের কৃতিত্ব অর্জন করেন নি ?!
মার্ক টমলিন

4
একটি সম্পূর্ণ বৈধ উত্তর, কিন্তু আমি আশ্চর্য হয়েছি যে আরমিন রোনাকারের উত্তর এটির সাথে মেলে না - অস্পষ্টতা সবসময়ই খারাপ।
রনলগ

1
@ ডেভনার ওয়েল, মনে হয়, আমার সার্ভারে, এই ফর্ম্যাটটি সমর্থিত নয়। আপনার সাথে এটি অন্যরকম হতে পারে।
লুকাস

1
এই সমাধানটি অপ্রত্যাশিত আচরণের দিকে পরিচালিত করতে পারে। যারা পিএইচপি 5.3+ ব্যবহার করেন তাদের প্রফেসর ফ্যালকেন উত্তর গ্রহণ করা উচিত , যাতে তারিখের ফর্ম্যাটটিতে কারওর সম্পূর্ণ নিয়ন্ত্রণ রয়েছে।
লুকা ফাগিওলি

185

এখানে স্ট্র্যাপটাইম () রয়েছে যা ঠিক এক ফর্ম্যাটকে প্রত্যাশা করে:

$a = strptime('22-09-2008', '%d-%m-%Y');
$timestamp = mktime(0, 0, 0, $a['tm_mon']+1, $a['tm_mday'], $a['tm_year']+1900);

4
এটি tm_month এর পরিবর্তে tm_mon এবং tm_day এর পরিবর্তে tm_mday হওয়া উচিত
amarillion

68
সাবধান, উইন্ডোজে স্ট্রিমটাইম ফাংশন উপলব্ধ নয়।
understack

12
উইন্ডোজ এবং পিএইচপি 5.3.0+ এর date_parse_from_formatপরিবর্তে এর পরিবর্তে ব্যবহার বিবেচনা করুন strptime
এরউইন ওয়েসেলস

1
... কারণ strptimeউইন্ডোজ প্ল্যাটফর্মগুলিতে প্রয়োগ করা হয়নি।
রেন্ডেল

যেহেতু এটি একটি উচ্চ ভোট প্রাপ্ত উত্তর, আপনি কি কোনও উত্তরটিতে এটি সম্পাদনা বিবেচনা করবেন যা উইন্ডোজ এবং ইউনিক্সনের পাশাপাশি পিএইচপি-তে কাজ করে? এবং আইএমএইচও আদর্শভাবে এটির সময় অঞ্চলগুলি উল্লেখ করা উচিত।
অধ্যাপক ফ্যালকেন চুক্তি

126

সঙ্গে DateTimeএপিআই :

$dateTime = new DateTime('2008-09-22'); 
echo $dateTime->format('U'); 

// or 

$date = new DateTime('2008-09-22');
echo $date->getTimestamp();

পদ্ধতিগত API এর সাথে একই:

$date = date_create('2008-09-22');
echo date_format($date, 'U');

// or

$date = date_create('2008-09-22');
echo date_timestamp_get($date);

যদি উপরেরটি ব্যর্থ হয় কারণ আপনি একটি অসমর্থিত ফর্ম্যাট ব্যবহার করছেন , আপনি ব্যবহার করতে পারেন

$date = DateTime::createFromFormat('!d-m-Y', '22-09-2008');
echo $dateTime->format('U'); 

// or

$date = date_parse_from_format('!d-m-Y', '22-09-2008');
echo date_format($date, 'U');

মনে রাখবেন যে আপনি যদি সেট না করে থাকেন !তবে সময়ের অংশটি বর্তমান সময়ের জন্য সেট করা হবে যা প্রথম চারটির থেকে আলাদা যা আপনি সময় বাদ দিলে মধ্যরাতটি ব্যবহার করবেন।

তবুও অন্য বিকল্পটি হ'ল IntlDateFormatterএপিআই ব্যবহার করা :

$formatter = new IntlDateFormatter(
    'en_US',
    IntlDateFormatter::FULL,
    IntlDateFormatter::FULL,
    'GMT',
    IntlDateFormatter::GREGORIAN,
    'dd-MM-yyyy'
);
echo $formatter->parse('22-09-2008');

আপনি যদি স্থানীয়করণের তারিখের স্ট্রিংগুলির সাথে কাজ না করেন তবে সহজ পছন্দ সম্ভবত ডেটটাইম is


15
আমি আজকাল আমার উত্তর উপর এটি সুপারিশ করব।
পর্যন্ত

Arggg। ! ভুলে যাবেন না ! আমার তারিখ ভিত্তিক টাইমস্ট্যাম্প প্রতিটি রিফ্রেশের পরিবর্তিত হয়ে আমাকে পাগল করছে - কারণ ডেটটাইম সাহায্যের সাথে জিজ্ঞাসা বা না বলা বর্তমান সময়ের যোগ করছিল। গরগর।

আমি যুক্ত করতে চাই যে আমি अस्पष्ट তারিখ পার্সিংয়ের বিরুদ্ধে সুপারিশ করছি এবং তারিখের স্ট্রিংগুলি বিশ্লেষণ করার সময় তারিখের বিন্যাসটি স্পষ্টভাবে দেওয়া উচিত।
অধ্যাপক ফ্যালকেন চুক্তিটি

114

এই জাতীয় ফাংশন সম্পর্কে সতর্ক থাকুন strtotime()আপনার অর্থ কী "অনুমান" করার চেষ্টা করুন (এটি অবশ্যই অনুমান করে না, নিয়মগুলি এখানে রয়েছে )।

এটি কেবল যুক্তিসঙ্গত জিনিস হওয়ায় প্রকৃতপক্ষে ২২ সেপ্টেম্বর ২০০৮22-09-2008 হিসাবে পার্স করা হবে।

কিভাবে 08-09-2008পার্স করা হবে ? সম্ভবত 09 আগস্ট 2008

কি হবে 2008-09-50? পিএইচপি এর কিছু সংস্করণ এটিকে 20 অক্টোবর 2008 হিসাবে পার্স করে ।

সুতরাং, আপনি যদি নিশ্চিত হন যে আপনার ইনপুটটি DD-MM-YYYYফর্ম্যাটে রয়েছে তবে @ আর্মিন রোনাচারের দেওয়া প্রস্তাবটি ব্যবহার করা আরও ভাল ।


5
বৈধ উদ্বেগ। আমার ধারণা স্ট্রোটাইম () আপনার লোকালে নির্ভর করে।
পর্যন্ত

13
দ্রষ্টব্য: বেশিরভাগ অ-ইংরাজীভাষী দেশগুলিতে, বিন্যাসটি হয় dd-mm-yyyy, না mm-dd-yyyy
কামিলো মার্টিন

1
@ ক্যামিলোমার্টিন বেশিরভাগ অ-ইংরাজী কথ্য দেশগুলি আপনার বর্ণিত প্রথম বিন্যাসটি ব্যবহার করে তবে ডিবি সাধারণত তারিখটি সংরক্ষণ করে YYYY-mm-ddকেবল রূপান্তরকারীদের দেখানোর জন্যই ঘটে
ড্যানি 22

@DannyG শুধু দিকে তাকিয়ে ডক্স এবং এটি ডিবি দ্বারা যদি আপনি কি বলতে চান মাইএসকিউএল তুমি অধিকার মনে হচ্ছে। তবে এটি করা হাস্যকর বলে মনে হচ্ছে ...
ক্যামিলো মার্টিন

57


এই পদ্ধতি কাজ করে উভয় উইন্ডোজ এবং ইউনিক্স এবং হয় সময় অঞ্চল সম্ভবত হলে আপনার সাথে কাজ কি আপনি চান সচেতন, তারিখ

আপনি যদি সময় অঞ্চল সম্পর্কে চিন্তা না করেন বা আপনার সার্ভারটি যে সময় অঞ্চল ব্যবহার করে তা ব্যবহার করতে চান:

$d = DateTime::createFromFormat('d-m-Y H:i:s', '22-09-2008 00:00:00');
if ($d === false) {
    die("Incorrect date string");
} else {
    echo $d->getTimestamp();
}

1222093324 (এটি আপনার সার্ভারের সময় অঞ্চলের উপর নির্ভর করে পৃথক হবে ...)


আপনি যদি কোন সময় অঞ্চলে নির্দিষ্ট করতে চান তবে এখানে EST। (নিউ ইয়র্ক হিসাবে একই।)

$d = DateTime::createFromFormat(
    'd-m-Y H:i:s',
    '22-09-2008 00:00:00',
    new DateTimeZone('EST')
);

if ($d === false) {
    die("Incorrect date string");
} else {
    echo $d->getTimestamp();
}

1222093305


অথবা ইউটিসি ব্যবহার করতে চাইলে । (" GMT " হিসাবে একই ।)

$d = DateTime::createFromFormat(
    'd-m-Y H:i:s',
    '22-09-2008 00:00:00',
    new DateTimeZone('UTC')
);

if ($d === false) {
    die("Incorrect date string");
} else {
    echo $d->getTimestamp();
}

1222093289


নির্বিশেষে, কাঠামোগত ডেটাগুলিতে স্ট্রিংগুলি পার্স করার সময় কঠোর হওয়া সর্বদা একটি ভাল সূচনার পয়েন্ট। এটি ভবিষ্যতে বিশ্রী ডিবাগিং সংরক্ষণ করতে পারে। তাই আমি সর্বদা তারিখের ফর্ম্যাট নির্দিষ্ট করার পরামর্শ দিই।


হেই ফ্যালকেন, আপনাকে স্বাগতম! তবে এটি সম্ভবত আরও ভাল উল্লেখ করা উচিত যে এই সমাধানটি পিএইচপি 5.3+ এর জন্য প্রযোজ্য
লুকা ফাগিওলি

43

এমকিটাইম ব্যবহার :

list($day, $month, $year) = explode('-', '22-09-2008');
echo mktime(0, 0, 0, $month, $day, $year);

এটাই আমি সবসময় করেছি। এটিতে বিস্ফোরণ - বা / অথবা। বা যাই হোক না কেন এটি পৃথক করা হয়, তারপরে mktime।
ধনী ব্র্যাডশো

1
এমকিটাইম ফাংশনের শেষ প্যারামিটারের জন্য পিএইচপি ম্যানুয়ালটিতে একটি নোট রয়েছে: "পিএইচপি 5.1.0 হিসাবে, এই প্যারামিটারটি অবচয় করা হয়েছে a ফলস্বরূপ, পরিবর্তে নতুন টাইমজোন হ্যান্ডলিং বৈশিষ্ট্যগুলি ব্যবহার করা উচিত" " আমি এখনও আবিষ্কার করতে পেরেছি যে নতুন বৈশিষ্ট্যগুলি সেগুলি সম্পর্কে যদিও তারা এর সাথে লিঙ্ক করেনি বলে কথা বলে!
উচ্চ অনিয়মিত

এটি strtotime()কোনও কারণে strtotime()নির্দিষ্ট তারিখগুলিতে কাজ করে না তার থেকে এটি অনেক ভাল and তাই এটি খুব অবিশ্বাস্য।
dspacejs

17

স্ট্রোটোটাইম () ফাংশন ব্যবহার করে আপনি সহজেই তারিখকে টাইমস্ট্যাম্পে রূপান্তর করতে পারেন

<?php
// set default timezone
date_default_timezone_set('America/Los_Angeles');

//define date and time
$date = date("d M Y H:i:s");

// output
echo strtotime($date);
?> 

আরও তথ্য: http://php.net/manual/en/function.strtotime.php

অনলাইন রূপান্তর সরঞ্জাম: http://freeonlinetools24.com/


ভবিষ্যতের পাঠকদের কাছে - স্ট্রোটাইম () একটি দুর্ঘটনা ছিল এবং এর ব্যবহারকে উত্সাহ দেওয়া উচিত নয়। এটি অস্পষ্ট, কারণ এটি তারিখের ফর্ম্যাটটিতে অনুমান করার চেষ্টা করে। এমনকি যদি আপনি এটি সঠিকভাবে ব্যবহার করেন তবে এটি আপনার কোডটিকে বোঝার এবং তর্ক করার পক্ষে আরও শক্ত করে তোলে এবং আপনার কোড বেসে এমন একটি পরিবর্তনের ঝুঁকি চালায় যা ত্রুটিগুলি প্রবর্তন করবে, কারণ আপনি স্ট্রোটোটাইম () কে যা দেবেন তা বিবেচ্য নয়, এটি তৈরি করবে এটি অনুমান করা ভাল। এই অনুমানটি ভুল হতে পারে তবে আপনি এটির ভুল অনুমানের কোনও ইঙ্গিত পাবেন না। এটি একটি ফুটগান আপনি যদি চান তবে এটি ব্যবহার করুন, তবে নবজাতক ব্যবহারকারীরা আমার মতে একটি সাবধানী ব্যবহার করতে পারেন। সতর্কতা: সামনের দিকে
অধ্যাপক

12

ফাংশন splitএবং mtimeফাংশন ব্যবহার করে এখানে একটি খুব সহজ এবং কার্যকর সমাধান :

$date="30/07/2010 13:24"; //Date example
list($day, $month, $year, $hour, $minute) = split('[/ :]', $date); 

//The variables should be arranged according to your date format and so the separators
$timestamp = mktime($hour, $minute, 0, $month, $day, $year);
echo date("r", $timestamp);

এটি আমার জন্য কবজির মতো কাজ করেছিল।


নোট করুন যে বিভাজন () এখন অবচয় করা হয়েছে, তবে আপনি যদি একটি 'পিএলপি সংস্করণ ব্যবহার করেন তবে এটি দুর্দান্ত কাজ করছে!
হুগো এইচ

6

প্রদত্ত ফাংশনটি strptime()উইন্ডোজের জন্য কাজ করে না এবং strtotime()অপ্রত্যাশিত ফলাফলগুলি ফিরে আসতে পারে, আমি এটি ব্যবহার করার পরামর্শ দিচ্ছি date_parse_from_format():

$date = date_parse_from_format('d-m-Y', '22-09-2008');
$timestamp = mktime(0, 0, 0, $date['month'], $date['day'], $date['year']);

2
দ্রষ্টব্য: স্ট্রোটোটাইম () সহ: বিভাজকটি একটি স্ল্যাশ (/), তারপরে আমেরিকান এম / ডি / ওয়াই ধরে নেওয়া হয়; যদিও বিভাজকটি যদি কোনও ড্যাশ (-) বা ডট (।) হয় তবে ইউরোপীয় ডিএমআই ফর্ম্যাটটি ধরে নেওয়া হবে। সুতরাং আমার মনে হয় স্ট্রিপটাইম ()
সিক্রেটলম

6

যদি আপনি নিশ্চিতভাবে জানতে চান যে কোনও তারিখ আপনার প্রত্যাশিত কিছুতে পার্স হয়েছে কিনা, আপনি ব্যবহার করতে পারেন DateTime::createFromFormat():

$d = DateTime::createFromFormat('d-m-Y', '22-09-2008');
if ($d === false) {
    die("Woah, that date doesn't look right!");
}
echo $d->format('Y-m-d'), PHP_EOL;
// prints 2008-09-22

এটি এক্ষেত্রে সুস্পষ্ট, তবে 03-04-2008আপনি কোথা থেকে এসেছেন তার উপর নির্ভর করে ২ য় এপ্রিল বা মার্চ 4 হতে পারে :)


1
DateTime::createFromFormat falseত্রুটি ফিরে , না null
এমপিনে

5

আপনি বিন্যাস ব্যবহার করুন জানেন তাহলে strptimeকারণ strtotimeবিন্যাস, যা সবসময় সঠিক নাও হতে পারে জন্য একটি অনুমান আছে। strptimeউইন্ডোজ যেহেতু বাস্তবায়িত হয় না তাই একটি কাস্টম ফাংশন রয়েছে

মনে রাখবেন যে ফেরতের tm_yearমূল্য 1900 থেকে! এবং tm_month0-11 হয়

উদাহরণ:

$a = strptime('22-09-2008', '%d-%m-%Y');
$timestamp = mktime(0, 0, 0, $a['tm_mon']+1, $a['tm_mday'], $a['tm_year']+1900)



4

পিএইচপি ফাংশন ব্যবহার করুন strtotime()

echo strtotime('2019/06/06');

তারিখ - স্থানীয় সময় / তারিখ ফর্ম্যাট করুন


তিনি বলেছিলেন, তারিখটি টাইমস্ট্যাম্পে, সময়োচিত নয়
স্যামুয়েল পেট্রোসিয়ান

এখনই এটি পরীক্ষা করে দেখুন।
গুরপ্রীত সিং

3
function date_to_stamp( $date, $slash_time = true, $timezone = 'Europe/London', $expression = "#^\d{2}([^\d]*)\d{2}([^\d]*)\d{4}$#is" ) {
    $return = false;
    $_timezone = date_default_timezone_get();
    date_default_timezone_set( $timezone );
    if( preg_match( $expression, $date, $matches ) )
        $return = date( "Y-m-d " . ( $slash_time ? '00:00:00' : "h:i:s" ), strtotime( str_replace( array($matches[1], $matches[2]), '-', $date ) . ' ' . date("h:i:s") ) );
    date_default_timezone_set( $_timezone );
    return $return;
}

// expression may need changing in relation to timezone
echo date_to_stamp('19/03/1986', false) . '<br />';
echo date_to_stamp('19**03**1986', false) . '<br />';
echo date_to_stamp('19.03.1986') . '<br />';
echo date_to_stamp('19.03.1986', false, 'Asia/Aden') . '<br />';
echo date('Y-m-d h:i:s') . '<br />';

//1986-03-19 02:37:30
//1986-03-19 02:37:30
//1986-03-19 00:00:00
//1986-03-19 05:37:30
//2012-02-12 02:37:30

3
<?php echo date('U') ?>

আপনি যদি চান তবে এটি একটি মাইএসকিউএল ইনপুট টাইপ টাইমস্ট্যাম্পে রাখুন। উপরেরগুলি খুব ভাল কাজ করে (কেবল পিএইচপি 5 বা তারপরে):

<?php $timestamp_for_mysql = date('c') ?>

3

এটি আমি এখানে কীভাবে করব:

function dateToTimestamp($date, $format, $timezone='Europe/Belgrade')
{
    //returns an array containing day start and day end timestamps
    $old_timezone=date_timezone_get();
    date_default_timezone_set($timezone);
    $date=strptime($date,$format);
    $day_start=mktime(0,0,0,++$date['tm_mon'],++$date['tm_mday'],($date['tm_year']+1900));
    $day_end=$day_start+(60*60*24);
    date_default_timezone_set($old_timezone);
    return array('day_start'=>$day_start, 'day_end'=>$day_end);
}

$timestamps=dateToTimestamp('15.02.1991.', '%d.%m.%Y.', 'Europe/London');
$day_start=$timestamps['day_start'];

এইভাবে, আপনি ফাংশনটিকে আপনি কী তারিখের ফর্ম্যাটটি ব্যবহার করছেন তা জানাতে এবং এমনকি সময় অঞ্চল নির্ধারণ করতে দিয়েছেন।


0

আপনি যদি ডেটাবেসে তারিখগুলি সংরক্ষণ করার জন্য সেট করে থাকেন তবে সময় / অঞ্চল সম্পর্কে সতর্ক হন, কারণ আমি যখন মাইএসকিএল থেকে তারিখগুলি তুলনায় timestampব্যবহার করে রূপান্তরিত করি তখন আমার সমস্যা হয়strtotime । তারিখকে টাইমস্ট্যাম্পে রূপান্তর করার আগে আপনাকে অবশ্যই একই সময় / অঞ্চলটি ব্যবহার করতে হবে, অন্যথায়, স্ট্রোটটাইম () ডিফল্ট সার্ভারের সময় অঞ্চল ব্যবহার করবে।

দয়া করে এই উদাহরণটি দেখুন: https://3v4l.org/ BRlmV

function getthistime($type, $modify = null) {
    $now = new DateTime(null, new DateTimeZone('Asia/Baghdad'));
    if($modify) {
        $now->modify($modify);
    }
    if(!isset($type) || $type == 'datetime') {
        return $now->format('Y-m-d H:i:s');
    }
    if($type == 'time') {
        return $now->format('H:i:s');
    }
    if($type == 'timestamp') {
        return $now->getTimestamp();
    }
}
function timestampfromdate($date) {
    return DateTime::createFromFormat('Y-m-d H:i:s', $date, new DateTimeZone('Asia/Baghdad'))->getTimestamp();
}

echo getthistime('timestamp')."--".
    timestampfromdate(getthistime('datetime'))."--".
    strtotime(getthistime('datetime'));

//getthistime('timestamp') == timestampfromdate(getthistime('datetime')) (true)
//getthistime('timestamp') == strtotime(getthistime('datetime')) (false)

-4

আপনি যদি কোনও ইউটিসি ডেটটাইম ( 2016-02-14T12:24:48.321Z) কে টাইমস্ট্যাম্পে রূপান্তর করতে চান, আপনি এখানে এটি কীভাবে করবেন:

function UTCToTimestamp($utc_datetime_str)
{
    preg_match_all('/(.+?)T(.+?)\.(.*?)Z/i', $utc_datetime_str, $matches_arr);
    $datetime_str = $matches_arr[1][0]." ".$matches_arr[2][0];

    return strtotime($datetime_str);
}

$my_utc_datetime_str = '2016-02-14T12:24:48.321Z';
$my_timestamp_str = UTCToTimestamp($my_utc_datetime_str);
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.