2014-11-02 109 views
0

我怎麼知道這是迄今爲止在這一年,如果我只知道一天數...在今年變換時至今

比方說,如果我知道那一天是「1」,然後拿到2014年1月1日,如果我知道那天是'32',那麼得到01.02.2014?

這是可能的JavaScript?

那麼php呢?

+2

這是可能的,支持最新的每一種語言。 – undefined 2014-11-02 11:56:03

+0

一切皆有可能。 但你應該決定,你想要客戶端(JavaScript)或服務器端(PHP)的日期處理... 在php中看到mktime()函數... – 2014-11-02 11:56:31

回答

1

PHP方式:

$first_day_of_this_year = strtotime(date('Y-01-01 00:00:00')); //as unix timestamp 
$after_32_days = $first_day_of_this_year + 32 * 24 * 60 * 60; 
echo date("Y-m-d", $after_32_days); 

這將輸出2014-02-02

這將始終本年度工作。如果您想在其他年份使用它,只需在第一個日期()函數中將Y替換爲所需年份。

這應該在閏年時正常工作。

編輯:

我做了一個功能:

function day_number_to_date($day_in_year, $year = null) { 
    $year = (is_null($year)) ? date("Y") : $year; //use current year if it was not passed to function 
    $first_day_of_year = strtotime(date("$year-01-01 00:00:00")); //first day of year as unix timestamp 
    $days_to_add = $day_in_year - 1; 
    $target_timestamp = $first_day_of_year + $days_to_add * 24 * 60 * 60; 
    $target_date = date("Y-m-d", $target_timestamp); 
    return $target_date; 
} 
echo day_number_to_date(32); //2014-02-01 
echo day_number_to_date(32, 2020); //2020-02-01 
echo day_number_to_date(400); //2015-02-04 
+0

爲什麼這不爲我工作 - 給我錯誤的日期:$ target_date = date(「l,Ydm」,$ target_timestamp); – 2014-11-02 21:56:27

+0

@JamesD。它爲我工作(輸出'2014年2月2日星期六'),除了您每月更換一天。 – Lukas 2014-11-03 07:55:11

1

試試這個:

var date = new Date("" + new Date().getFullYear()); 
var day = 32; 

date.setDate(date.getDate() + day-1); 

console.log(date); // => Sat Feb 01 2014 ... 
1

在JavaScript中,你可以通過簡單地創建與天參數設置爲您所需要一年的一天,一個新Date對象做到這一點 - 看到MDN參數注意部分:

var dayInYear = 32; 
var newDate = new Date(2014, 0, dayInYear); 
// newDate is 01 Feb. 

,或者如果你有一個現有的Date對象:

var theDate = new Date('01/01/2014'); 
var dayInYear = 32; 
var newDate = new Date(theDate.getFullYear(), theDate.getMonth(), dayInYear); 
1

看完你的問題後,聽起來好像你想要提供日期和年份來獲取特定的日期。

function getDateFromDay(year, day) { 
    return new Date((new Date(year, 0)).setDate(day)); 
} 

getDateFromDay(2014, 1); // will give Wed Jan 01 2014 00:00:00 
0

你需要你的代碼知道它是什麼年代,太 - 每四年討厭的2月29日 - 但它只是一個連續減去的月份長度,直至剩餘物質小於下個月的長度(同時保持跟蹤哪個月是最後一次扣除的)。事情是這樣的片段(僞C):

day_to_month (year, day_in_year) 
    { 
    day_count = day_in_year; 
    if (not_leap_year()); 
    while (day_in_year < month [month_count]) 
     { 
     subtract month[month_count++]; 
     } 
    else 
    while (day_in_year < leap_month [month_count]) 
     { 
     subtract leap_month [month_count++]; 
     } 
    } 
    date_set (year, month_count, day_count); 

我不寫javascript,但我知道的任何理由,這可能不會在bash腳本甚至做 - 只是需要聲明和初始化能力數組,以及基本的算術和流量控制功能。

0

function day2Date(day, year) { 
 
    return new Date(year,0,day); 
 
} 
 
console.log(day2Date(32, 2014)); //gives Sat Feb 01 2014 00:00:00